Python时间模块详解

Python常用的跟时间相关的模块有两个timedatetime

其中datetimetime模块更高层次的封装,在实际使用中,两个模块各有千秋

Python Version: 3.5+

time

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
>>> import time
>>>
>>> time.time() #获取时间戳,从1970年1月1日0:00到现在的秒数
1465321187.56645
>>> time.time() - 86400 #可以按需 + - 秒数
1465234811.8091
>>>
>>> time.ctime() #返回'Wed Jun 8 01:42:41 2016'格式的日期时间字符串
'Wed Jun 8 01:42:41 2016'
>>> time.ctime() - 86400 #报错!ctime返回的字符串,是不能 + - 的
Traceback (most recent call last):
File "<input>", line 1, in <module>
TypeError: unsupported operand type(s) for -: 'str' and 'int'
>>> time.ctime(time.time() - 86400) #ctime可以接收时间戳参数并转化为日期时间字符串,通过这个功能,可以把时间戳的时间进行 + - 后传递给ctime进行转换
'Tue Jun 7 01:45:09 2016'
>>>
>>> time.gmtime() #返回一个格式化的时间对象
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=7, tm_hour=17, tm_min=47, tm_sec=1, tm_wday=1, tm_yday=159, tm_isdst=0)
>>> type(time.gmtime())
<class 'time.struct_time'>
>>> time.gmtime(time.time() - 86400) #也可以通过传递时间戳来更改时间
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=6, tm_hour=17, tm_min=48, tm_sec=27, tm_wday=0, tm_yday=158, tm_isdst=0)
>>> time.gmtime()[0] #可以通过索引的方式去取值
2016
>>> time.gmtime()[1]
6
>>> time.gmtime()[2] #问题来了,现在已经是8号了却还显示7,是因为这里显示的是格林威治时间,不是本地时间
7
>>>
>>> time.localtime() #本地时间来了!这个方法显示的是本地时区的时间!返回的格式与gmtime是一样的,用法也一样
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=8, tm_hour=1, tm_min=56, tm_sec=5, tm_wday=2, tm_yday=160, tm_isdst=0)
>>>
>>> time.mktime(time.localtime()) #该方法接收一个tuple类型的参数,可接收struct_time对象并将其转化为时间戳
1465322289.0
>>>
>>> time.strftime("%Y-%m-%d", time.localtime()) #将struct_time对象以指定的格式显示
'2016-06-08'
>>> time.strptime('2016-06-08', "%Y-%m-%d") #将日期字符串以指定的格式转化为struct_time对象
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=2, tm_yday=160, tm_isdst=-1)
>>>
>>> time.sleep(4)
>>>
>>> time.clock() #在Unix系统上表示进程时间。在Windows上第一次返回进程时间,第二次返回第一次到第二次之间的时间
29.472588

datetime

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
>>> datetime.date.today()  #2016-06-08
datetime.date(2016, 6, 8)
>>> print(datetime.date.today())
2016-06-08
>>>
>>> datetime.date.fromtimestamp(time.time()) #将时间戳转为日期格式
datetime.date(2016, 6, 8)
>>>
>>> datetime.datetime.now() #返回当前时间
datetime.datetime(2016, 6, 8, 2, 18, 57, 453874)
>>> print(datetime.datetime.now())
2016-06-08 02:19:08.895585
>>> datetime.datetime.now().timetuple() #转化为struct_time对象
time.struct_time(tm_year=2016, tm_mon=6, tm_mday=8, tm_hour=2, tm_min=20, tm_sec=17, tm_wday=2, tm_yday=160, tm_isdst=-1)
>>>
>>> datetime.datetime.now().replace(2015, 5, 9) #替换指定的日期或时间
datetime.datetime(2015, 5, 9, 2, 21, 39, 897457)
>>>
>>> datetime.datetime.strptime("09/05/15 7:56", "%d/%m/%y %H:%M") #将日期时间字符串转为时间格式,并以指定的格式进行显示
datetime.datetime(2015, 5, 9, 7, 56)
>>>
>>> datetime.datetime.now() + datetime.timedelta(days=10) #比现在加10天
datetime.datetime(2016, 6, 18, 2, 26, 46, 45019)
>>> datetime.datetime.now() + datetime.timedelta(days=-10) #比现在减10天
datetime.datetime(2016, 5, 29, 2, 26, 53, 536217)
>>> datetime.datetime.now() + datetime.timedelta(hours=-10) #比现在减10小时
datetime.datetime(2016, 6, 7, 16, 27, 0, 717995)
>>> datetime.datetime.now() + datetime.timedelta(seconds=120) #比现在+120s
datetime.datetime(2016, 6, 8, 2, 29, 7, 456727)

  • 附录1:
索引(Index) 属性(Attribute) 值(Values)
0 tm_year(年) 比如2011
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
6 tm_wday(weekday) 0 - 6(0表示周日)
7 tm_yday(一年中的第几天) 1 - 366
8 tm_isdst(是否是夏令时) 默认为-1
  • 附录2:
格式 含义
%a 本地(locale)简化星期名称
%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 时区的名字(如果不存在为空字符)
%% ‘%’字符
  • 附录3:time模块,时间之间的转换关系