工作中总能用到time, datetime模块,多数时候用于时间日期不同格式间的转换。如果没有熟练掌握各函数用法,那么将不能快速解决问题。今天详细整理一下time模块的用法,有不当之处还请指正。
先上总结:
import time
time.time() # 返回当前时间戳
time.mktime(tupletime) # 接受时间元组,返回时间戳
time.localtime(secs) # 接收时间戳,返回时间元组
time.strptime(date_str,fmt) # 接收日期,返回时间元组
time.asctime(tupletime) # 接收时间元组,返回格式化日期
time.strftime(fmt,tupletime) # 接收时间元组,返回格式化日期
从上面可以看出,主要有三类数据:时间戳,时间元组,格式化日期。主要的操作就是三类数据间的转换。
下面结合实例来实践一下,彼此之前的转换。
1.当前时间戳
time.time() # 当前时间戳
>>>1533103691.808361
2. 当前时间元组
time.localtime() # 当前时间元组
>>>time.struct_time(tm_year=2018, tm_mon=8, tm_mday=1, tm_hour=14, tm_min=10, tm_sec=46, tm_wday=2, tm_yday=213, tm_isdst=0)
解释一下时间元组里参数意思:
tm_year : 当前年份, tm_mon : 当前月份, tm_mday : 当前月的日期,
tm_hour : 当前小时, tm_min : 当前分钟, tm_sec : 当前秒数,
tm_wday : 星期(从0开始), tm_yday : 一年中第几天, tm_isdst : 是否夏令时。
那么元组的参数有什么用呢,比如可以获取当前年份、月份、一年中第几天等。
time.localtime().tm_yday # 一年中第几天
>>>213
time.localtime().tm_year # 年份
>>>2018
time.localtime().tm_mon # 月份
>>>8
3.按0000-00-00 00:00:00显示当前日期时间
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()) # 当前日期时间
>>>'2018-08-01 14:24:08'
4.把指定日期时间转换成时间戳 - 按照日期形式补格式化参数
s = "Sat Mar 28 22:24:24 2016"
time.mktime(time.strptime(s,"%a %b %d %H:%M:%S %Y")) # 将指定日期转换成时间戳
>>>1459175064.0
s = '2018-05-20 14:32:29'
time.mktime(time.strptime(s,'%Y-%m-%d %H:%M:%S')) # 将指定日期转换成时间戳
>>>1526797949.0
5.把指定日期时间转成时间元组- 按照日期形式补格式化参数
s = '2018-05-20 14:32:29'
time.strptime(s,'%Y-%m-%d %H:%M:%S') # 转成时间元组
>>>time.struct_time(tm_year=2018, tm_mon=5, tm_mday=20, tm_hour=14, tm_min=32, tm_sec=29, tm_wday=6, tm_yday=140, tm_isdst=-1)
6.把指定时间戳转成格式化日期时间
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(1526797949)) # 把时间戳转成格式化日期时间
>>>'2018-05-20 14:32:29'
7.获取指定日期时间两天后的日期时间 - 先获取时间戳,再计算两天后的时间戳,然后再转成格式化日期
s = '2018-05-20 10:32:29'
timestamp = time.mktime(time.strptime(s,'%Y-%m-%d %H:%M:%S')) # 获取时间戳
next_time = timestamp+3600*24*2 # 两天后的时间戳
time.strftime('%Y-%m-%d %H:%M:%S',time.localtime(next_time)) # 获取格式化日期
>>>'2018-05-22 10:32:29'