time模块提供各种时间相关的功能,与时间相关的模块有:time,datetime,calendar
必要说明:
这个模块的功能不是适用于所有的平台
这个模块中定义的大部分函数是调用C平台上的同名函数实现
一些术语和约定的解释:
- 时间戳(timestamp)的方式,返回的是float类型:通常来说,时间戳表示的是从1970年1月1日开始按秒计算的偏移量(time.gmtime(0)此模块中的函数无法处理1970纪元年以前的时间或太遥远的未来(处理极限取决于C函数库,对于32位系统而言,是2038年)
- UTC(Coordinated Universal Time,世界协调时)也叫格林威治天文时间,是世界标准时间.在我国为UTC+8
- DST(Daylight Saving Time)即夏令时
- 一些实时函数的计算精度可能不同
表示时间的三种方式
在Python中,通常有这三种方式来表示时间:时间戳、元组(struct_time)、格式化的时间字符串:
时间戳(timestamp):通常来说,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。
格式化的时间字符串(Format String): ‘1999-12-06’
%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 当前时区的名称 %% %号本身
元组(struct_time):struct_time元组共有9个元素(年,月,日,时,分,秒,一年中第几周,一年中第几天,是否是夏令时),gmtime(),localtime()和strptime()以时间元祖(struct_time)的形式返回
索引(Index) | 属性(Attribute) | 值(Values) |
---|---|---|
0 | tm_year(年) | 比如2011 |
1 | tm_mon(月) | 1 - 12 |
2 | tm_mday(日) | 1 - 31 |
3 | tm_hour(时) | 0 - 23 |
4 | tm_min(分) | 0 - 59 |
5 | tm_sec(秒) | 0 - 60 |
6 | tm_wday(weekday) | 0 - 6(0表示周一) |
7 | tm_yday(一年中的第几天) | 1 - 366 |
8 | tm_isdst(是否是夏令时) | 默认为0 |
import time
# time() 返回当前时间的一个时间戳,(1970元年后的浮点秒数)
print(time.time()) # 1525509143.3561425 (这是一个时间戳)# localtime() 将一个时间戳(1970纪元年后经过的浮点秒数)转化为当前地区的一个struct_time(),未设置默认为当前时间
print(time.localtime(1525509143.3561425))
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=32, tm_sec=23, tm_wday=5, tm_yday=125, tm_isdst=0)# ctime([secs]) 把一个时间戳(按秒计算的浮点数)转化为格式化时间字符串。默认参数是time.time()
print(time.ctime()) # Sat May 5 16:54:30 2018# gmtime() 与localtime类似,时间戳转化为struct_time不过返回的UTC世界标准时间。
print(time.gmtime(1525509143.3561425))
# time.struct_time(tm_year=2018, tm_mon=5, tm_mday=5, tm_hour=8, tm_min=32, tm_sec=23, tm_wday=5, tm_yday=125, tm_isdst=0)# mktime() 将一个strut_time 转化为时间戳(1970纪元年后经过的浮点秒数)
print(time.mktime(time.localtime())) # 1525509143.3561425
# asctime([t]) 把一个struct_time转化为格式化时间字符串。默认参数time.localtime()
print(time.asctime()) # Sat May 5 16:52:07 2018# strftime(format[,t]) 把一个struct_time转化为格式化的时间字符串,默认参数time.localtime(),如果元组中任命一个元素越界,将会抛出ValueError异常
print(time.strftime("%b %d %Y %H:%M:%S", time.localtime())) # Jan 14 2019 10:29:54
print(time.strftime("%Y %m %d %X",time.localtime())) # 2018 05 05 17:04:49
# strptime(string[,format]) 把一个格式化时间字符串转化为struct_time,实际上它和strftie()是逆操作
print(time.strptime('14 2019 10:29:54','%d %Y %H:%M:%S'))
# time.struct_time(tm_year=2019, tm_mon=1, tm_mday=14, tm_hour=10, tm_min=29, tm_sec=54, tm_wday=0, tm_yday=14, tm_isdst=-1)# clock() 第一次返回的是程序运行时间,第二个是和第一个clock直接的时间差。在UNIX系统上,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。而在WINDOWS中,第一次调用,返回的是进程运行的实际时间。而第二次之后的调用是自第一次调用以后到现在的运行时间。(实际上是以WIN32上QueryPerformanceCounter()为基础,它比毫秒表示更为精确)
# python3.3以后不被推荐使用,该方法依赖操作系统,建议使用per_counter(返回系统运行时间)或process_time(返回进程运行时间)代替
print(time.clock()) #4.72616147781398e-07 这个数基本等于0
time.sleep(2)
print(time.clock()) #1.9999187100225817 等于2# altzone() 返回格林威治西部的夏令时地区的偏移秒数,如果该地区在格林威治东部会返回负值(如西欧,包括英国),对夏令时启用地区才能使用
time.daylight 如果夏令时被定义,则该值为非零
time.perf_counter() 返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间.由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的
time.process_time() 返回当前进程执行CPU的时间总和,不包含睡眠时间.由于返回值的基准点是未定义的,所以只有连续调用的结果之间的差才是有效的
time.sleep(secs) 推迟调用线程的运行,secs的单位是秒
time.timezone() 是当地时区(未启动夏令时)距离格林威治的偏移秒数(美洲>0,欧洲大部分,亚洲,非洲<=0)
time.tzname 包含两个字符串的元组,第一是当地夏令时区的名称,第二是当地的DST时区的名称
小结:时间戳是计算机能够识别的时间;时间字符串是人能够看懂的时间;元组则是用来操作时间的
几种格式之间的转换,放网络收集图