python提供了三个与时间有关的标准模块,时间模块 time、基本时间日期模块 datetime 和日历模块 Calendar。本文介绍时间模块time。
time模块
time处理时间的模块,获取时间戳,格式化时间等
时间表现格式:
time模块中,时间表现的格式主要有三种:
- timestamp时间戳,是指某个时间与1970年1月1日00:00:00的差值,单位为秒,是一个浮点型数值
- struct_time时间元组,共有九个元素组。
- format time 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式,比如
Sun Aug 11 15:54:07 2019
(1)时间戳
通过time.time()获得
import time
t1 = time.time()
print(t1)
# 1565513824.45309
(2)格式化时间
通过类似于time.strftime("%Y-%m-%d %H:%M:%S")这样的表达式获得。
import time
t2 = time.strftime('%Y-%m-%d %X')
print(t2)
# 2019-08-11 16:55:46
常用的格式化时间字符
格式 | 含义 | 例子 |
---|---|---|
%a | 本地(locale)简化星期名称 | Sun |
%A | 本地完整星期名称 | Sunday |
%b | 本地简化月份名称 | Aug |
%B | 本地完整月份名称 | August |
%c | 本地相应的日期和时间表示 | Sun Aug 11 16:31:26 2019 |
%d | 一个月中的第几天(01 - 31) | 11 (11日) |
%H | 一天中的第几个小时(24小时制,00 - 23) | 16(下午4点) |
%I | 第几个小时(12小时制,01 - 12) | 04 (下午4点) |
%j | 一年中的第几天(001 - 366) | 223 (2019年的第233天) |
%m | 月份(01 - 12) | 08(8月) |
%M | 分钟数(00 - 59) | 34 (34分) |
%p | 本地am或者pm的相应符 | PM(下午) |
%S | 秒(01 - 61) | 37(37秒) |
%U | 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。 | 32(2019年第32 个星期) |
%w | 一个星期中的第几天(0 - 6,0是星期天) | 0(星期天) |
%W | 和%U基本相同,不同的是%W以星期一为一个星期的开始。31(2019年第31个星期天) | |
%x | 本地相应日期 | 08/11/19(2019年8月11日) |
%X | 本地相应时间 | 16:38:57(时间) |
%y | 去掉世纪的年份(00 - 99) | 19(2019年) |
%Y | 完整的年份 | 2019(2019年) |
%Z | 时区的名字(如果不存在为空字符) | |
%% | ‘%’字符 |
(3)时间元组
结构化时间,或者叫时间元祖, 通过time.localtime()获得,返回一个时间元祖
import time
t3 = time.localtime()
print(t3)
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=11, tm_hour=17, tm_min=3, tm_sec=34, tm_wday=6, tm_yday=223, tm_isdst=0)
共有9个元素,返回struct_time的函数主要有gmtime(),localtime(),strptime()。下面列出这种方式元组中的几个元素:
序号 | 属性 | 值 |
---|---|---|
0 | tm_year | 年 (2019) |
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 ,闰年多2秒,60或61 是闰秒) |
6 | tm_wday | 周一到周日 (0到6,0是周日) |
7 | tm_yday | 一年中第几天(1-366) |
8 | tm_isdst | 是否夏令时(1:是;0:不是;-1:未知;默认 -1) |
(4)time模块常用的函数
time.time()
该函数返回当前时间的时间戳,也就是距离1970年1月1日00:00:00的差值。
import time
print(time.time())
# 1565515307.2585971
time.localtime()
该函数能将一个时间戳转换成元组的形式,如果没有指定时间戳,默认使用当前时间的时间戳。需要注意的是返回的时间是当地时间。
import time
t = time.time()
t1 = time.localtime(t)
t2 = time.localtime()
t3 = time.gmtime()
print('时间戳转为元组:',t1)
print('当地时间:', t2)
print('UTC时间:', t3)
# 时间戳转为元组: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=11, tm_hour=17, tm_min=19, tm_sec=39, tm_wday=6, tm_yday=223, tm_isdst=0)
# 当地时间: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=11, tm_hour=17, tm_min=19, tm_sec=39, tm_wday=6, tm_yday=223, tm_isdst=0)
# UTC时间: time.struct_time(tm_year=2019, tm_mon=8, tm_mday=11, tm_hour=9, tm_min=19, tm_sec=39, tm_wday=6, tm_yday=223, tm_isdst=0)
time.gmtime()
该函数和localtime()的功能一样,只是它返回的时间是格林威治天文时间(UTC),也就是世界标准时间。中国时间为UTC+8。
time.mktime()
该函数将一个元组转换成时间戳。
import time
t2 = time.mktime(time.localtime())
print(t2)
# 1565515472.0
time.sleep()
该函数能让程序线程暂停休息,单位为秒。
import time
print(time.time())
time.sleep(5)
print('5秒之后的时间为:', time.time())
# 1565515621.4053676
# 5秒之后的时间为: 1565515626.4061983
time.asctime()
该函数将一个元组转换成格式化时间。如果没有传入参数,默认传入time.localtime()。
import time
print(time.asctime((2019, 8, 11, 17, 32, 21, 6, 223, 0))) # 必须传入9个元素的元组
print(time.asctime())
# Sun Aug 11 17:32:21 2019
# Sun Aug 11 17:36:13 2019
time.strftime()
该函数按照格式化字符把一个元组转换成格式化时间字符串。如果没有传入参数,默认传入time.localtime()。
import time
print(time.strftime("%Y-%m-%d %X", time.localtime()))
# 2019-08-11 17:42:47
time.strptime()
该函数按照格式化字符把一个格式化时间字符串转成元组。
import time
print(time.strptime('2019-8-11 17:46:14', '%Y-%m-%d %X'))
print(time.strptime('Aug 2019', '%b %Y'))
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=11, tm_hour=17, tm_min=46, tm_sec=14, tm_wday=6, tm_yday=223, tm_isdst=-1)
# time.struct_time(tm_year=2019, tm_mon=8, tm_mday=1, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=213, tm_isdst=-1)
time模块中常用的函数可以总结成下图,基本上就是三者如何转换:
参考:https://finthon.com/python-time/