Python 程序中经常要用到日期时间相关的功能。这里简单总结一下。
表示日期时间常用三种形式:
秒为单位的浮点数struct_time 元组时间字符串第一种方式是效率最高的,但是输出的结果对用户不友好。比如下面的例子:
import time; # 引入time模块 ticks = time.time() print ("当前时间戳为:", ticks)输出的结果是:
当前时间戳为: 1558496090.8486245这里的 1558496090.8486245 就是表示时间的浮点数。如果我们只需要精确到秒,可以忽略小数点后面的部分。
我们可以通过 time.localtime() 将其转化为时间元组:
tm_struct = time.localtime(ticks) print(tm_struct)得到的结果如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)这个结果说明 1558496090.8486245 表示的时间是: 2019-5-22 11:34:50 周三,是今年的第 142 天
有时我们需要得到 格林威治时间,那么可以用 time.gmtime() 函数:
time.gmtime(ticks)输出如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=3, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=0)因为北京在东 8 区,所以我们的时间比格林威治时间超前 8 个小时。
使用 time.mktime() 函数可以实现时间元组转换为秒为单位的浮点数。
下面是一个例子:
time.mktime(tm_struct)输出结果如下:
1558496090.0可以看到,小数点后面的部分被抹去了。因为时间元组只能精确到秒。
转换方法有很多,最简单的是 asctime():
time_str = time.asctime( tm_struct ) print(time_str)输出的结果如下:
Wed May 22 11:34:50 2019这样得到的字符串我们无法控制格式。如果要精确控制格式,我们可以使用 strftime():
time.strftime("%Y-%m-%d %H:%M:%S", tm_struct) time.strftime("%a %b %d %H:%M:%S %Y", tm_struct)输出的结果如下:
'2019-05-22 11:34:50' 'Wed May 22 11:34:50 2019'strftime 支持的格式控制包括:
%y 两位数的年份表示(00-99) %Y 四位数的年份表示(000-9999) %m 月份(01-12) %d 月内中的一天(0-31) %H 24小时制小时数(0-23) %I 12小时制小时数(01-12) %M 分钟数(00=59) %S 秒(00-59) %a 本地简化星期名称 %A 本地完整星期名称 %b 本地简化的月份名称 %B 本地完整的月份名称 %c 本地相应的日期表示和时间表示 %j 年内的一天(001-366) %p 本地A.M.或P.M.的等价符 %U 一年中的星期数(00-53)星期天为星期的开始 %w 星期(0-6),星期天为星期的开始 %W 一年中的星期数(00-53)星期一为星期的开始 %x 本地相应的日期表示 %X 本地相应的时间表示 %Z 当前时区的名称 %% %号本身函数 time.strptime() 可以完成这个转换,下面是个例子:
tm2_struct = time.strptime('2019-05-22 11:34:50', "%Y-%m-%d %H:%M:%S") print(tm2_struct)输出的结果如下:
time.struct_time(tm_year=2019, tm_mon=5, tm_mday=22, tm_hour=11, tm_min=34, tm_sec=50, tm_wday=2, tm_yday=142, tm_isdst=-1)time.ctime() 类似于 time.asctime(), 请看下面的例子:
time.ctime(ticks)输入结果如下:
'Wed May 22 11:34:50 2019'如果想精确控制输出的字符串,我没查到有现成的函数。估计只能先转成元组,然后在格式化成字符串。 我自己写了个转换函数:
def time2str(ticks, fmt='%a %b %d %H:%M:%S %Y'): tm = time.localtime(ticks) return time.strftime(fmt, tm)测试代码:
time2str(ticks, "%Y-%m-%d %H:%M:%S")输出结果如下:
'2019-05-22 12:54:36'这个我也没查到有函数能直接做这个转换。但是我们可以自己写一个。
def str2time(str, fmt='%a %b %d %H:%M:%S %Y'): tm = time.strptime(str, fmt) return time.mktime(tm)下面是个简单的测试用例:
str2time('2019-05-22 11:34:50', "%Y-%m-%d %H:%M:%S")输出结果如下:
1558496090.0