Python3.5笔记——第10章 日期和时间
Python3.5笔记
第10章 日期和时间
时间戳和日期
时间戳
通常,时间戳(timestamp)表示从1970年1月1日00时00分00秒开始,按秒计算的偏移量。也就是从1970年1月1日00时00分00秒开始(北京时间:1970年1月1日08时00分00秒开始)到现在的总毫秒数。
时间戳是一个经加密后形成的凭证文档,包括3个部分:
- 需要加时间戳的文件摘要(digest)
- DTS收到文件的日期和时间。
- DTS的数字签名。
一般来说,时间戳的产生过程为:用户首先将需要加时间戳的文件用Hash编码加密称为文件摘要,然后将摘要发送到DTS,DTS加入收入文件摘要的时间和日期信息后,再对该文件加密(数字签名),最后送回用户。
书面签署文件的时间是由签署人自己写上的,而数字时间戳是由认证单位DTS添加的,以DTS收到文件的时间为依据。
时间格式化符号
python格式化符号
格式 | 含义 |
---|---|
%a | 本地简化星期名称 |
%A | 本地完整星期名称 |
%b | 本地简化月份名称 |
%B | 本地完整月份名称 |
%c | 本地相应的日期和时间表示 |
%d | 一个月中的第几天(01-31) |
%H | 一天中的第几个小时(24小时制,00-23) |
%I | 第几个小时(12小时制,01-12) |
%j | 一年中的第几天(001-366) |
%m | 月份(01-12) |
%M | 分钟数(00-59) |
%p | 本地AM或PM的相应符 |
%S | 秒(01-61) |
%U | 一年中的星期数(取值00-53,星期天为一星期的开始),第一个星期天之前的所有天数都放在0周 |
%w | 一个星期中的第几天(0-6,0是星期天) |
%W | 和%U基本相同,不同的是%W以星期一位一个星期的开始 |
%x | 本地相应日期 |
%X | 本地相应时间 |
%y | 去掉实际的年份(00-99) |
%Y | 完整的年份 |
%Z | 时区的名字(如果不存在未空字符) |
%% | %字符 |
- %p只有与%I配合使用才有效果
- %S文档中强调确实是0-61,而不是59,闰年占两秒
- %w当使用striptime函数时,只有这一年的周数和天数确定时%U和%W才会被计算
struct_time元组
struct_time元组共有9个元素:年、月、日、时、分、秒、一年中的第几周、一年中第几天、是否为夏令时。
Python函数用一个元组装起来的9组数字处理时间,也被称作struct_time元组。如下表:
序号 | 属性 | 字段 | 值 |
---|---|---|---|
0 | tm_year | 4位数字 | 如2018 |
1 | tm_mon | 月 | 1-12 |
2 | tm_mday | 日 | 1-31 |
3 | tm_hour | 小时 | 0-23 |
4 | tm_min | 分钟 | 0-59 |
5 | tm_sec | 秒 | 0-61(60或61是润秒) |
6 | tm_wday | 一周的第几日 | 0-6(0是周一) |
7 | tm_yday | 一年中的第几日 | 1-366 |
8 | tm_isdst | 夏令时 | -1、0、1、-1是决定是否为夏令时的旗帜 |
time模块
time()函数
time函数用于返回当前时间的时间戳(1970年01月01日08时00分00秒到现在的浮点秒数)
time()函数的语法格式如下:
time.time()
code:
import time
print('当前的时间戳是:%f'% time.time())
输出:
当前的时间戳是:1537410262.299011
localtime([secs])函数
localtime()函数的作用是格式化时间戳为本地时间。如果secs参数未输入,就以当前时间为转换标准。语法格式如下:
time.localtime([secs])
此语法中time指的是time模块,secs指转化为time.struct_time类型的对象的秒数。该函数没有任何返回值。示例如下:
print('time.localtime()===',time.localtime())
输出:
time.localtime()=== time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=11, tm_min=10, tm_sec=9, tm_wday=3, tm_yday=263, tm_isdst=0)
gmtime([secs])函数
gmtime()函数用于将一个时间戳转换为UTC时区(0时区)的struct_time,可选的参数sec表示从1970-1-1到现在的秒数。gmtime()函数的默认值为time.time(),函数返回time.struct_time类型的对象(struct_time是在time模块中定义的表示时间的对象)。语法格式如下:
time.gmtime([secs])
此语法中的time指的是time模块,secs指转换为time.struct_time类型的对象的秒数。示例如下:
print('time.gmtime()===',time.gmtime())
输出:
time.gmtime()=== time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=3, tm_min=10, tm_sec=9, tm_wday=3, tm_yday=263, tm_isdst=0)
mktime(t)函数
mktime()函数用于执行与gmtime()、localtime()相反的操作,接收struct_time对象作为参数,返回用秒数表示时间的浮点数。如果输入的值不是合法时间,就会触发OverflowError或ValueError。语法格式如下:
time.mktime(t)
此语法中time指的是time模块,t指结构化的时间或完整的9位元组元素。返回用秒数表示时间的浮点数。示例如下:
t = (2018,9,20,11,17,0,1,198,0)
print('time.mktime(t)===',time.mktime(t))
输出:
time.mktime(t)=== 1537413420.0
asctime([t])函数
asctime()函数用于接收时间元组并返回一个可读的形式为Sun Sep 25 09:09:37 2016(2016年09月25日周日9时09分37秒)的24个字符的字符串。
asctime()函数的语法格式如下:
time.asctime([t])
此语法中time指的是time模块,t指完整的9位元组元素或通过函数gmtime()、localtime()返回的时间值。实例如下:
t = time.localtime()
print('time.asctime(t)===',time.asctime(t))
输出:
time.asctime(t)=== Thu Sep 20 11:29:15 2018
ctime([secs])函数
ctime()函数用于把一个时间戳(按秒计算的浮点数)转化为time.asctime的形式。如果为指定参数secs参数或参数为None,就会默认将time.time()作为参数。ctime的作用相当于asctime(localtime(secs))。语法格式如下:
time.ctime([secs])
time指的是time模块,secs指要转换为字符串时间的秒数。示例如下:
print('time.ctime(t)===',time.ctime())
输出:
time.ctime(t)=== Thu Sep 20 11:35:27 2018
sleep(secs)函数
sleep()函数用于推迟调用线程的运行,可通过secs指定进程挂起的时间。sleep(secs)函数的语法如下:
time.sleep(secs)
此语法中time指定是time模块,secs指推迟执行的秒数。示例如下:
print('time.start===',time.ctime())
time.sleep(5)
print('time.end===',time.ctime())
输出:
time.start=== Thu Sep 20 11:40:07 2018
time.end=== Thu Sep 20 11:40:12 2018
clock()函数
clock()函数用于以浮点数计算的浮点数返回当前CPU时间,用来衡量不同程序的耗时,比time.time()更有用。在UNIX系统上,返回的是“进程时间”,是用秒表示的浮点数(时间戳);在windows中,第一次调用返回的是进程运行的实际时间,第二次之后的调用是第一次调用后到现在的运行时间。语法格式如下:
time.clock()
此语法中,time指的是time模块,该函数不需要参数,该函数有两个功能:
- 在第一次调用时,返回程序运行的实际时间。
- 第二次调用时,返回自第一次调用后到这次调用的时间间隔。
在Win32系统下,clock()函数返回的是真实时间(wall time),而在UNIX/Linux下返回的是CPU时间。示例如下:
def producure():
time.sleep(2)
t1 = time.clock()
producure()
print('seconds processs time:',time.clock() - t1)
t2 = time.time()
producure()
print('seconds wall time:',time.time() - t2)
输出:
seconds processs time: 1.9998607791725642
seconds wall time: 2.0001144409179688
strftime(format[,t])函数
strftime()函数用于接收时间元组,并返回以可读字符串表示的当地时间,格式由参数format决定。语法格式如下:
time.strftime(format[,t])
语法中time指的time模块,format指格式化字符串,t指可选的参数,是一个struct_time对象,t如果不传的话,指的是当前时间。示例如下:
t = (2016,9,25,17,50,38,6,48,0)
t= time.mktime(t)
print(time.strftime('%b %d %Y %d %H:%M:%S ',time.gmtime(t)))
#打印当前时间
print(time.strftime('%Y/%m/%d %H:%M:%S'))
输出:
Sep 25 2016 25 09:50:38
2018/09/20 15:21:08
strptime(string[,format])函数
strptime()函数用于根据指定的格式把一个时间字符串解析为时间元组。语法格式如下:
time.strptime(string[,format])
此语法中time指的是time模块,string指时间字符串,format指格式化字符串。返回struct_time对象。示例如下:
struct_time = time.strptime('2018/09/20 15:21:08','%Y/%m/%d %H:%M:%S')
print('returned tuple:',struct_time)
输出如下:
returned tuple: time.struct_time(tm_year=2018, tm_mon=9, tm_mday=20, tm_hour=15, tm_min=21, tm_sec=8, tm_wday=3, tm_yday=263, tm_isdst=-1)
三种时间格式转换
[图片上传失败...(image-565d2e-1539315235251)]
datatime模块
datatiem是data与time的结合体,包括data与time的所有信息。datatime功能强大,支持0001到9999年。
datatime模块定义了两个常量:datatime.MINYEAR和datatime.MAXYEAR。这两个常量分别表示datatim所能表示的最小、最大年份。其中,MINYEAR = 1,MAXYEAR = 9999。
datatime模块定义了以下5个类:
- datatime.date:表示日期的类。常用的属性有year、month、day。
- datatime.time:表示时间的类。常用的属性有hour、minute、second、microsecond。
- datatime.datetime:表示日期时间。
- datatime.timedelta:表示时间间隔,即两个时间点之间的长度。
- datatime.tzinfo:与时区有关的相关信息。
其中,datatime.datetime类的应用最为普遍,datatime.datatime类中有以下方法:
today()
today()方法的语法如下:
datatime.datetime.today()
此语法中datatime.datetime指的是datatime.datetime类。
返回一个表示当前本地时间的datatime对象。示例如下:
import datetime
print('datetime.datetime.today() == ',datetime.datetime.today())
输出:
datetime.datetime.today() == 2018-09-20 17:12:52.069461
now([tz])
now()语法格式如下:
datetime.datetime.now([tz])
此语法中datatime.datetime指的是datatime.datetime类。
返回一个表示当前本地时间的datatime对象。
此语法如果提供了tz参数,就获取tz参数所指时区的本地时间。
示例如下:
print('datetime.datetime.now() == ',datetime.datetime.now())
输出:
datetime.datetime.now() == 2018-09-20 17:16:47.842946
utcnow()
utcnow()方法的语法格式如下:
datatime.datetime.utcnow()
此语法中datatime.datetime指的是datatime.datetime类。
返回一个表示当前UTC时间的datatime对象。
示例如下:
#utcnow()
print('datetime.datetime.utcnow() == ',datetime.datetime.utcnow())
输出:
datetime.datetime.utcnow() == 2018-09-20 09:24:31.448463
fromtimestamp(timstamp[,tz])
根据时间戳创建一个datatime对象,语法格式如下:
datetime.datetime.fromtimestamp(timstamp[,tz])
此语法中datatime.datetime指的是datatime.datetime类。参数tz指定时区信息。
返回一个表示当前datatime时间的datatime对象。示例如下:
#fromtimestamp()
print('datetime.datetime.fromtimestamp(time.time()) == ',datetime.datetime.fromtimestamp(time.time()))
输出:
datetime.datetime.fromtimestamp(time.time()) == 2018-09-20 17:30:42.857707
utcfromtimestamp(timestamp)
根据时间戳创建一个datatime对象。语法格式如下:
datetime.datetime.utcfromtimestamp(timestamp)
此语法中datatime.datetime指的是datatime.datetime类。timestamp指时间戳。返回一个datatime对象。示例如下如下:
#utcfromtimestamp()
print('datetime.datetime.utcfromtimestamp(time.time()) == ',datetime.datetime.utcfromtimestamp(time.time()))
输出:
datetime.datetime.utcfromtimestamp(time.time()) == 2018-09-21 01:19:47.698207
striptime(date_string,format)
将格式字符串转换为datetime对象。语法格式如下:
datatime.datetime.strptime(data_string,format)
此语法中datatime.datetime指的是datatime.datetime类,data_string是指日期字符串,format为格式化方式。
返回一个datetime对象。示例如下:
#striptime()
t = datetime.datetime.now()
print('datetime.datetime.striptime() == ',datetime.datetime.strptime(str(t),'%Y-%m-%d %H:%M:%S.%f'))
输出:
datetime.datetime.striptime() == 2018-09-21 09:28:27.960964
strftime(format)
将格式化字符串转换为datetime对象。语法格式如下:
datetime.datetime.strftime(format)
此语法中datatime.datetime指的是datatime.datetime类,format为格式化字符串。返回一个datetime对象。示例如下:
t = datetime.datetime.now()
print('datetime.datetime.strftime() == ',datetime.datetime.strftime(t,'%Y-%m-%d %H:%M:%S'))
输出:
datetime.datetime.strftime() == 2018-09-21 09:32:43
strftime完整实例
#一个使用strfmat()的完整实例
#! /usr/bin/python
# -*- coding:UTF-8 -*-
dt = datetime.datetime.now()
print('当前时间',dt)
print('dt.strftime(\'%Y-%m-%d %H:%M:%S.%f\') ==',dt.strftime('%Y-%m-%d %H:%M:%S.%f'))
print('dt.strftime(\'%Y-%m-%d %I:%M:%S %p\') ==',dt.strftime('%Y-%m-%d %I:%M:%S %p'))
print('dt.strftime(\'%a\') == ',dt.strftime('%a'))
print('dt.strftime(\'%A\') == ',dt.strftime('%A'))
print('dt.strftime(\'%b\') == ',dt.strftime('%b'))
print('dt.strftime(\'%B\') == ',dt.strftime('%B'))
print('dt.strftime(\'%c\') == ',dt.strftime('%c'))
print('dt.strftime(\'%x\') == ',dt.strftime('%x'))
print('dt.strftime(\'%X\') == ',dt.strftime('%X'))
print('这是一周中的第%s天' % dt.strftime('%w'))
print('这是一年中的第%s天' % dt.strftime('%j'))
print('这是一年中的第%s个星期' % dt.strftime('%U'))
输出:
当前时间 2018-09-21 10:20:58.604170
dt.strftime('%Y-%m-%d %H:%M:%S.%f') == 2018-09-21 10:20:58.604170
dt.strftime('%Y-%m-%d %I:%M:%S %p') == 2018-09-21 10:20:58 AM
dt.strftime('%a') == Fri
dt.strftime('%A') == Friday
dt.strftime('%b') == Sep
dt.strftime('%B') == September
dt.strftime('%c') == Fri Sep 21 10:20:58 2018
dt.strftime('%x') == 09/21/18
dt.strftime('%X') == 10:20:58
这是一周中的第5天
这是一年中的第264天
这是一年中的第37个星期
日历模块
日历(Calender)模块的的函数都与日历有关,如输出某月的字符月历。星期一默认是每周的第一天,如果需要更改为星期天,则需要使用calendar.setfirstweekday()函数。内置函数如下:
calendar.calendar(year,w=2,l=1,c=6)
该函数返回一个指定年份的年历,year参数是必填的,其余3个参数是选填的,w,l,c分别用来指定每日宽度间隔,每星期行数,每月间隔距离。其中第3个字母是英文字母L的小写,即line的缩写。输出的年历中,3个月一行。
示例如下:
#calendar
import calendar
#w,l,c分别用来指定每日宽度间隔,每星期行数,每月间隔距离
#print(calendar.calendar(2018,w=1,l=1,c=1))
#不指定w,l,c的情况下,将使用默认设置
print(calendar.calendar(2018))
输出:
2018
January February March
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2 3 4
8 9 10 11 12 13 14 5 6 7 8 9 10 11 5 6 7 8 9 10 11
15 16 17 18 19 20 21 12 13 14 15 16 17 18 12 13 14 15 16 17 18
22 23 24 25 26 27 28 19 20 21 22 23 24 25 19 20 21 22 23 24 25
29 30 31 26 27 28 26 27 28 29 30 31
April May June
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 1 2 3 4 5 6 1 2 3
2 3 4 5 6 7 8 7 8 9 10 11 12 13 4 5 6 7 8 9 10
9 10 11 12 13 14 15 14 15 16 17 18 19 20 11 12 13 14 15 16 17
16 17 18 19 20 21 22 21 22 23 24 25 26 27 18 19 20 21 22 23 24
23 24 25 26 27 28 29 28 29 30 31 25 26 27 28 29 30
30
July August September
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 1 2 3 4 5 1 2
2 3 4 5 6 7 8 6 7 8 9 10 11 12 3 4 5 6 7 8 9
9 10 11 12 13 14 15 13 14 15 16 17 18 19 10 11 12 13 14 15 16
16 17 18 19 20 21 22 20 21 22 23 24 25 26 17 18 19 20 21 22 23
23 24 25 26 27 28 29 27 28 29 30 31 24 25 26 27 28 29 30
30 31
October November December
Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su Mo Tu We Th Fr Sa Su
1 2 3 4 5 6 7 1 2 3 4 1 2
8 9 10 11 12 13 14 5 6 7 8 9 10 11 3 4 5 6 7 8 9
15 16 17 18 19 20 21 12 13 14 15 16 17 18 10 11 12 13 14 15 16
22 23 24 25 26 27 28 19 20 21 22 23 24 25 17 18 19 20 21 22 23
29 30 31 26 27 28 29 30 24 25 26 27 28 29 30
31
calendar.firstweekday
返回每周以星期几开始。默认设置下,返回0,即星期一。示例如下:
print('calendar.firstweekday() == ',calendar.firstweekday())
输出:
calendar.firstweekday() == 0
calendar.isleap(year)
如果是闰年就返回True,否则就返回False。示例如下:
print('calendar.isleap(2018) == ',calendar.isleap(2018))
输出:
calendar.isleap(2018) == False
calendar.leapday(y1,y2)
返回y1,y2两年之间的闰年总数。示例如下:
print('calendar.leapdays(2000,2018) == ',calendar.leapdays(2000,2018))
输出:
calendar.leapdays(2000,2018) == 5
calendar.month(year,month,w=2,l=1)
返回一个多行字符串格式的year年month月日历,两行标题,一周一行。每日宽度为2个字符,每行长度为7*w+6。1是每星期的行数。w,l为可选参数,如果没有设置,将使用默认值。示例如下:
print(calendar.month(2018,9,w=1,l=1))
输出如下:
September 2018
Mo Tu We Th Fr Sa Su
1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
calendar.monthcalendar(year,month)
返回一个整数的单层嵌套列表。每个子列表装在代表一个星期的整数。year年month外的日期都设为0;范围内的日期由该月第几日表示,从1开始。示例如下:
print(calendar.monthcalendar(2018,9))
输出:
[[0, 0, 0, 0, 0, 1, 2], [3, 4, 5, 6, 7, 8, 9], [10, 11, 12, 13, 14, 15, 16], [17, 18, 19, 20, 21, 22, 23], [24, 25, 26, 27, 28, 29, 30]]
calendar.monthrange(year,month)
返回两个整数。第一个是该月星期几的日期码,第二个是该月的日期码,日从0(星期一)到6(星期日),月从1到12。
print('calendar.monthrange(2018,9) == ',calendar.monthrange(2018,9))
输出:
calendar.monthrange(2018,9) == (5, 30)
calendar.setfirstweekday(weekday)
设置每周的起始日期,0(星期一)到6(星期日)。示例如下:
print('calendar.firstweekday == ',calendar.firstweekday())
calendar.setfirstweekday(6)
print('calendar.firstweekday == ',calendar.firstweekday())
输出:
calendar.firstweekday == 0
calendar.firstweekday == 6
牛刀小试——时间大杂烩
自定义函数,使用Time、Calendar和datetime模块获取当前日期前后N天和N月的日期
#牛刀小试——时间大杂烩
#!/usr/bin/python
#-*- coding:UTF-8 -*-
from time import strftime, localtime
from datetime import timedelta, date
import calendar
year = strftime("%Y", localtime())
mon = strftime("%m", localtime())
day = strftime("%d", localtime())
hour = strftime("%H", localtime())
min = strftime("%M", localtime())
sec = strftime("%S", localtime())
def today():
'''''
get today,date format="YYYY-MM-DD"
'''''
return date.today()
def todaystr():
'''
get date string, date format="YYYYMMDD"
'''
return year + mon + day
def datetime():
'''''
get datetime,format="YYYY-MM-DD HH:MM:SS"
'''
return strftime("%Y-%m-%d %H:%M:%S", localtime())
def datetimestr():
'''''
get datetime string
date format="YYYYMMDDHHMMSS"
'''
return year + mon + day + hour + min + sec
def get_day_of_day(n=0):
'''''
if n>=0,date is larger than today
if n<0,date is less than today
date format = "YYYY-MM-DD"
'''
if n < 0:
n = abs(n)
return date.today()-timedelta(days=n)
else:
return date.today()+timedelta(days=n)
def get_days_of_month(year, mon):
'''''
get days of month
'''
return calendar.monthrange(year, mon)[1]
def get_firstday_of_month(year, mon):
'''''
get the first day of month
date format = "YYYY-MM-DD"
'''
days = "01"
if int(mon) < 10:
mon = "0" + str(int(mon))
arr = (year, mon, days)
return "-".join("%s" %i for i in arr)
def get_lastday_of_month(year, mon):
'''''
get the last day of month
date format = "YYYY-MM-DD"
'''
days=calendar.monthrange(year, mon)[1]
mon = addzero(mon)
arr = (year, mon, days)
return "-".join("%s" %i for i in arr)
def get_firstday_month(n=0):
'''''
get the first day of month from today
n is how many months
'''
(y, m, d) = getyearandmonth(n)
d = "01"
arr = (y, m, d)
return "-".join("%s" %i for i in arr)
def get_lastday_month(n=0):
'''''
get the last day of month from today
n is how many months
'''
return "-".join("%s" %i for i in getyearandmonth(n))
def getyearandmonth(n=0):
'''''
get the year,month,days from today
befor or after n months
'''
thisyear = int(year)
thismon = int(mon)
totalmon = thismon + n
if n >= 0:
if totalmon <= 12:
days = str(get_days_of_month(thisyear, totalmon))
totalmon = addzero(totalmon)
return year, totalmon, days
else:
i = totalmon//12
j = totalmon%12
if j == 0:
i -= 1
j = 12
thisyear += i
days = str(get_days_of_month(thisyear, j))
j = addzero(j)
return str(thisyear), str(j), days
else:
if totalmon > 0 and totalmon < 12:
days = str(get_days_of_month(thisyear,totalmon))
totalmon = addzero(totalmon)
return year, totalmon, days
else:
i = totalmon//12
j = totalmon%12
if(j==0):
i -= 1
j = 12
thisyear += i
days = str(get_days_of_month(thisyear, j))
j = addzero(j)
return str(thisyear), str(j), days
def addzero(n):
'''''
add 0 before 0-9
return 01-09
'''
nabs = abs(int(n))
if nabs < 10:
return "0" + str(nabs)
else:
return nabs
def get_today_month(n=0):
'''''
获取当前日期前后N月的日期
if n>0, 获取当前日期前N月的日期
if n<0, 获取当前日期后N月的日期
date format = "YYYY-MM-DD"
'''
(y, m, d) = getyearandmonth(n)
arr = (y, m, d)
if int(day) < int(d):
arr = (y, m, day)
return "-".join("%s" %i for i in arr)
def get_firstday_month(n=0):
(y, m, d) = getyearandmonth(n)
arr = (y, m, '01')
return "-".join("%s" %i for i in arr)
def main():
print('today is:', today())
print('today is:', todaystr())
print('the date time is:', datetime())
print('data time is:', datetimestr())
print('2 days after today is:', get_day_of_day(2))
print('2 days before today is:', get_day_of_day(-2))
print('2 months after today is:', get_today_month(2))
print('2 months before today is:', get_today_month(-2))
print('2 months after this month is:', get_firstday_month(2))
print('2 months before this month is:', get_firstday_month(-2))
if __name__=="__main__":
main()
输出:
today is: 2018-09-21
today is: 20180921
the date time is: 2018-09-21 15:06:19
data time is: 20180921150619
2 days after today is: 2018-09-23
2 days before today is: 2018-09-19
2 months after today is: 2018-11-21
2 months before today is: 2018-07-21
2 months after this month is: 2018-11-01
2 months before this month is: 2018-07-01
习题
习题1:
输入一个字符(如:lastweek),输出上周一的日期和本周一的日期和时间,时间以0时0分0秒(如:2016-09-19 00:00:00 - 2016-09-26 00:00:00)
def getMonday():
dt = datetime.datetime.today()
now_day = dt.strftime('%w')
chazhi = int(now_day) - 1
monday = datetime.date.today() - datetime.timedelta(days=chazhi)
print('本周一是:', monday.strftime('%Y-%m-%d %H:%M:%S'))
lastweek = monday - datetime.timedelta(days=7)
print('上周一是:', lastweek.strftime('%Y-%m-%d %H:%M:%S'))
getMonday()
输出:
本周一是: 2018-09-17 00:00:00
上周一是: 2018-09-10 00:00:00
习题2:
输入两个字符(如:past1day、per1hnour),输出从昨天凌晨0点到今天凌晨0点24小时内整点的时间戳。