Python时间模块time
Python中与处理时间有关的模块包括time、datetime和calenda。
先理清几个概念:
时间戳(timestamp):表示从1970年1月1日00:00:00开始按秒计算的偏移量。
UTC:世界协调时,亦即格林威治天文时间,世界标准时间
DST:夏令时
时间元组(time_struct):时间元组包含9个元素,返回time_struct的函数主要有gmtime(),localtime(),strptime()。
时间元组中的参数:
索引 | 属性 | 值 |
---|---|---|
0 | tm_year(年) | 如2020 |
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 |
- time.localtime([secs])
将一个时间戳secs转化为当前时区的时间元组struct_time。当secs参数省略时默认为当前系统时间。
>>>time.localtime()
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=29, tm_hour=9, tm_min=28, tm_sec=48, tm_wday=6, tm_yday=89, tm_isdst=0)
- time.gmtime([secs])
将一个时间戳转化为UTC时区(0时区)的时间元组struct_time。(看起来和localtime作用效果类似)
>>>time.gmtime()
time.struct_time(tm_year=2020, tm_mon=3, tm_mday=29, tm_hour=1, tm_min=40, tm_sec=19, tm_wday=6, tm_yday=89, tm_isdst=0)
- time.time()
返回当前时间的时间戳
>>>time.time()
1585446103.1988997
- time.mktime(t)
将一个时间元组struct_time转化为时间戳
>>>a=time.mktime(time.localtime())
1585446197.0
- time.sleep(secs)
让线程推迟指定时间运行,即睡secs秒
之后再执行后面的命令。
>>>print(time.time())
time.sleep(5)
print(time.time())
1585446328.1043615
1585446333.104717
#从上面结果也能发现也不是百分百精确,但其精度已经达到很高
- time.clock()
unix系统中其返回的是“进程时间”,他是用秒表示的浮点数(时间戳);Windows系统中,第一次调用返回的是进程运行的实际时间,第二次调用返回的是自第一次调用以后到现在的运行时间。 - time.asctime([t])
把一个表示时间的元组或者struct_time
表示为如下形式,当没有参数时,会把local.time()作为参数传入。
>>>time.asctime()
Sun Mar 29 09:52:02 2020
- time.ctime([secs])
把一个时间戳
转化为time.asctime()的形式。如果参数未给或者为None的时候,将会默认当前系统时间。
>>>time.ctime()
Sun Mar 29 09:55:14 2020
- time.strftime(format [ , t ])
把一个表示时间的元组或者struct_time
转化为格式化的时间字符串。当t未指定时,从local.time()传入。如果元组中任何一个元素越界,会抛出异常valueerror 。
格式 | 说明 |
---|---|
%a | 本地(local)简化星期名称 |
%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 | 时区的名字(如果不存在为空字符) |
%% | ‘%’字符 |
>>>import time
t = (2016, 9, 25, 17, 50, 38, 6, 48, 0)
t = time.mktime(t)
print(time.strftime('%b %d %Y %H:%M:%S', time.gmtime(t)))
print(time.strftime('%b %d %Y %H:%M:%S'))
print(time.strftime('%H:%M:%S'))
Sep 25 2016 09:50:38
Mar 29 2020 10:19:37
10:19:37
- time.strptime(string[,format])
time.strftime(format [ , t ])的逆操作,把一个格式化时间字符串转化为struct_time。
>>>import time
struct_time = time.strptime("8 Sep 18", "%d %b %y")
print('returned tuple: ', struct_time)
returned tuple: time.struct_time(tm_year=2018, tm_mon=9, tm_mday=8, tm_hour=0, tm_min=0, tm_sec=0, tm_wday=5, tm_yday=251, tm_isdst=-1)