Python 与日期、时间相关的内置模块,主要有:time
、datetime
、calendar
等,一般常见的问题,使用它们就足够了,但遇到复杂度很高的需求时,代码的可读性就会变得很差,所以,我们还可以使用体验更好的第三方模块:moment
。本文会从内置模块介绍到第三方模块。
time
time
是用来表示时分秒。
获取时间
import time
print(time.time())
1559201353.5570097
得到的是一个 时间戳,是从 1970-01-01 00:00:00 (时间基准点)到现在的秒数,数据类型是浮点型,是 UTC 时间。
UTC 的由来,全球分为24个时区,每个时区都自己的本地时间,为了能有一个统一的时间,所以设置了 UTC(Universal Time Coordinated,通用协调时),都与英国伦敦的本地时间一样。
但时间戳对于人来讲,可读性极差,所以我们需要将其转换成日常使用的形式。
转换时间戳
import time
# 输出 UTC 时间的年月日时分秒结构体
print('UTC:', time.gmtime(time.time())
# 输出本地时间的年月日时分秒结构体
print('localtime:', time.localtime(time.time())
UTC: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=7, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)
localtime: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=30, tm_hour=15, tm_min=29, tm_sec=13, tm_wday=3, tm_yday=150, tm_isdst=0)
仔细观察的话,会发现我们的本地时间与 UTC 相差了 8 小时,这正是北京和伦敦的时差。
虽然现在也可以看出具体的日期,但还不是很方便,我们可以进一步格式化 struct_time
,得到更直观的日期字符串。
import time
st = time.localtime(time.time())
tf = time.strftime('%Y-%m-%d %H:%M:%S', st)
print(tf)
2019-05-30 15:29:13
# 我们还可以将日期字符串转换成 struct_time
st = time.strptime(tf, '%Y-%m-%d %H:%M:%S')
print(st)
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3