# time
Python time模块
- 时间格式化
- 计时器功能
- time模块其他内置函数
- time模块包含的属性
# Python time模块
在 Python 文档里,time是归类在Generic Operating System Services中,换句话说, 它提供的功能是更加接近于操作系统层面的。通读文档可知,time 模块是围绕着 Unix Timestamp 进行的。
该模块主要包括一个类 struct_time,另外其他几个函数及相关常量。需要注意的是在该模块中的大多数函数是调用了所在平台C library的同名函数, 所以要特别注意有些函数是平台相关的,可能会在不同的平台有不同的效果。另外一点是,由于是基于Unix Timestamp,所以其所能表述的日期范围被限定在 1970 – 2038 之间,如果你写的代码需要处理在前面所述范围之外的日期,那可能需要考虑使用datetime模块更好。
获取当前时间和转化时间格式
- time() 返回时间戳格式的时间 (相对于1.1 00:00:00以秒计算的偏移量)
- ctime() 返回字符串形式的时间,可以传入时间戳格式时间,用来做转化
- asctime() 返回字符串形式的时间,可以传入struct_time形式时间,用来做转化
- localtime() 返回当前时间的struct_time形式,可传入时间戳格式时间,用来做转化
- gmtime() 返回当前时间的struct_time形式,UTC时区(0时区) ,可传入时间戳格式时间,用来做转化
>>> import time
>>> time.time()
1473386416.954
>>> time.ctime()
'Fri Sep 09 10:00:25 2016'
>>> time.ctime(time.time())
'Fri Sep 09 10:28:08 2016'
>>> time.asctime()
'Fri Sep 09 10:22:40 2016'
>>> time.asctime(time.localtime())
'Fri Sep 09 10:33:00 2016'
>>> time.localtime()
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=10, tm_min=1, tm_sec=19, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.localtime(time.time())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=10, tm_min=19, tm_sec=11, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.gmtime()
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=2, tm_min=13, tm_sec=10, tm_wday=4, tm_yday=253, tm_isdst=0)
>>> time.gmtime(time.time())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=2, tm_min=15, tm_sec=35, tm_wday=4, tm_yday=253, tm_isdst=0)
struct_time共有9个元素,其中前面6个为年月日时分秒,后面三个分别代表的含义为:
- tm_wday 一周的第几天(周日是0)
- tm_yday 一年的第几天
- tm_isdst 是否是夏令时
# 时间格式化
time.mktime()
将一个以struct_time格式转换为时间戳
>>> time.mktime(time.localtime())
1473388585.0
time.strftime(format[,t]) 把一个struct_time时间转化为格式化的时间字符串。如果t未指定,将传入time.localtime()。如果元组中任何一个元素越界,ValueError的错误将会被抛出。
- %c 本地相应的日期和时间表示
- %x 本地相应日期
- %X 本地相应时间
- %y 去掉世纪的年份(00 – 99)
- %Y 完整的年份
- %m 月份(01 – 12)
- %b 本地简化月份名称
- %B 本地完整月份名称
- %d 一个月中的第几天(01 – 31)
- %j 一年中的第几天(001 – 366)
- %U 一年中的星期数。(00 – 53星期天是一个星期的开始。)第一个星期天之前的所有天数都放在第0周。
- %W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
- %w 一个星期中的第几天(0 – 6,0是星期天)
- %a 本地(locale)简化星期名称
- %A 本地完整星期名称
- %H 一天中的第几个小时(24小时制,00 – 23)
- %I 第几个小时(12小时制,01 – 12)
- %p 本地am或者pm的相应符,“%p”只有与“%I”配合使用才有效果。
- %M 分钟数(00 – 59)
- %S 秒(01 – 61),文档中强调确实是0 – 61,而不是59,闰年秒占两秒
- %Z 时区的名字(如果不存在为空字符)
- %% ‘%’字符
>>> time.strftime("%Y-%m-%d %H:%M:%S", time.localtime())
'2016-09-09 10:54:21'
time.strptime(string[,format])
把一个格式化时间字符串转化为struct_time。实际上它和strftime()是逆操作。
>>> time.strptime(time.ctime())
time.struct_time(tm_year=2016, tm_mon=9, tm_mday=9, tm_hour=11, tm_min=0, tm_sec=4, tm_wday=4, tm_yday=253, tm_isdst=-1)
# 计时器功能
time.sleep(secs)
线程推迟指定的时间运行。单位为秒。
time.clock()
这个需要注意,在不同的系统上含义不同。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
import time
time.sleep(1)
print("clock1:%s" % time.clock())
time.sleep(1)
print("clock2:%s" % time.clock())
time.sleep(1)
print("clock3:%s" % time.clock())
运行结果为:
clock1:1.57895443216e-06
clock2:1.00064381867
clock3:2.00158724394
其中第一个clock()输出的是程序运行时间,第二、三个clock()输出的都是与第一个clock的时间间隔
# time模块其他内置函数
- altzone() 返回格林威治西部的夏令时地区的偏移秒数。如果该地区在格林威治东部会返回负值(如西欧,包括英国)。对夏令时启用地区才能使用。
- tzset() 根据环境变量TZ重新初始化时间相关设置。
# time模块包含的属性
- timezone 是当地时区(未启动夏令时)距离格林威治的偏移秒数(>0,美洲;<=0大部分欧洲,亚洲,非洲)。
- tzname 包含一对根据情况的不同而不同的字符串,分别是带夏令时的本地时区名称和不带的。
import time
print(time.timezone)
print(time.tzname)
print(time.tzname[0].decode("GBK"))
print(time.tzname[1].decode("GBK"))
运行结果
-28800
('\xd6\xd0\xb9\xfa\xb1\xea\xd7\xbc\xca\xb1\xbc\xe4', '\xd6\xd0\xb9\xfa\xcf\xc4\xc1\xee\xca\xb1')
中国标准时间
中国夏令时