时间模块
2022年4月18日大约 2 分钟
本文主要针对python中的时间对象进行介绍。
时间表现形式
- timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量
- struct_time: 时间元组,共有九个元素组
- format time: 格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式
时间格式转换图
常用方法
获取当前时间戳
In [26]: time.time() Out[26]: 1556888776.3707364 In [25]: time.mktime(time.localtime()) # 元组->时间戳 Out[25]: 1556888742.0
当前时间的 struct_time 形式
In [1]: import time In [2]: time.localtime() Out[2]: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3, tm_hour=20, tm_min=48, tm_sec=32, tm_wday=4, tm_yday=123, tm_isdst=0) In [29]: time.localtime(time.time()) # 时间戳->元组 Out[29]: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3, tm_hour=21, tm_min=12, tm_sec=6, tm_wday=4, tm_yday=123, tm_isdst=0) In [22]: time.gmtime() Out[22]: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3, tm_hour=13, tm_min=3, tm_sec=21, tm_wday=4, tm_yday=123, tm_isdst=0) In [30]: time.gmtime(time.time()) # 时间戳->元组 Out[30]: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3, tm_hour=13, tm_min=12, tm_sec=21, tm_wday=4, tm_yday=123, tm_isdst=0) In [34]: time.strptime(a, "%a %b %d %H:%M:%S %Y") # 字符串->元组 Out[34]: time.struct_time(tm_year=2019, tm_mon=5, tm_mday=3, tm_hour=21, tm_min=9, tm_sec=25, tm_wday=4, tm_yday=123, tm_isdst=-1)
当前时间的字符串形式
In [3]: time.ctime() Out[3]: 'Fri May 3 20:49:30 2019' In [27]: time.ctime(time.time()) # 时间戳->字符串 Out[27]: 'Fri May 3 21:08:20 2019' In [4]: time.asctime() Out[4]: 'Fri May 3 20:49:45 2019' In [28]: time.asctime(time.localtime()) # 元组->默认字符串 Out[28]: 'Fri May 3 21:09:25 2019' In [7]: time.strftime('%Y-%m-%d %H:%M"%S', time.localtime()) # 元组->格式化字符串 Out[7]: '2019-05-03 20:52"47' In [31]: time.strftime("%a %b %d %H:%M:%S %Y", time.localtime()) Out[31]: 'Fri May 03 21:15:50 2019'
耗时统计
time.perf_counter()
调用一次
perf_counter()
,从计算机系统里随机选一个时间点A,计算其距离当前时间点B1有多少秒当第二次调用该函数时,默认从第一次调用的时间点A算起,距离当前时间点B2有多少秒
两个函数取差,即实现从时间点B1到B2的计时功能
time.process_time()
返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,只有连续调用的结果之间的差才是有效的
time.time()
连续两次生成的时间戳之差即为耗时
import time def test(): time.sleep(2) start1 = time.perf_counter() start2 = time.time() start3 = time.process_time() test() finish1 = time.perf_counter() finish2 = time.time() finish3 = time.process_time() t1 = finish1 - start1 t2 = finish2 - start2 t3 = finish3 - start3 print(t1) print(t2) print(t3)
结果为:
1.9998265000000002 # perf_counter 2.000767946243286 # time 0.0 # process_time