time模块
python学习-time模块
预备知识
- time模块中时间表现的格式主要有三种:
- timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。 time()、clock()
- struct_time:时间元组,共有九个元素组。 gmtime()、localtime()、strptime()
- format time :格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
- struct_time 时间元组
遵循元组的所有特性,如索引(从0开始)、切片、可遍历等
- tm_year :年
- tm_mon :月(1-12)
- tm_mday :日(1-31)
- tm_hour :时(0-23)
- tm_min :分(0-59)
- tm_sec :秒(0-59)
- tm_wday :星期几(0-6,0表示周日)
- tm_yday :一年中的第几天(1-366)
- tm_isdst :是否是夏令时(默认为-1)
//ex_1.py
# -*- coding: utf-8 -*-
#struct_time属性
import time
local_time = time.localtime()
print(local_time)
print(local_time[0]) #使用元组索引调用
print(local_time.tm_year) #使用成员符号调用
print(local_time[0:3]) #元组切片
'''
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=8, tm_min=51, tm_sec=58, tm_wday=0, tm_yday=39, tm_isdst=0)
2021
2021
(2021, 2, 8)
[Finished in 0.1s]
'''
- 时间字符串支持的格式符号:(区分大小写)
%a 本地星期名称的简写(如星期四为Thu)
%A 本地星期名称的全称(如星期四为Thursday)
%b 本地月份名称的简写(如八月份为agu)
%B 本地月份名称的全称(如八月份为august)
%c 本地相应的日期和时间的字符串表示(如:15/08/27 10:20:06)
%d 一个月中的第几天(01 - 31)
%f 微妙(范围0.999999)
%H 一天中的第几个小时(24小时制,00 - 23)
%I 第几个小时(12小时制,0 - 11)
%j 一年中的第几天(001 - 366)
%m 月份(01 - 12)
%M 分钟数(00 - 59)
%p 本地am或者pm的相应符
%S 秒(00 - 61)
%U 一年中的星期数。(00 - 53星期天是一个星期的开始。)第一个星期天之 前的所有天数都放在第0周。
%w 一个星期中的第几天(0 - 6,0是星期天)
%W 和%U基本相同,不同的是%W以星期一为一个星期的开始。
%x 本地相应日期字符串(如15/08/01)
%X 本地相应时间字符串(如08:08:10)
%y 去掉世纪的年份(00 - 99)两个数字表示的年份
%Y 完整的年份(4个数字表示年份)
%z 与UTC时间的间隔(如果是本地时间,返回空字符串)
%Z 时区的名字(如果是本地时间,返回空字符串)
%% ‘%’字符
常见函数使用
secs 表示 转换为time.struct_time类型的对象的秒数 ,t 表示 时间元组,string 表示 时间字符串,format 表示 格式化字符串
time.time()
返回当前时间的时间戳,time()精度上相对没有那么高,而且受系统的影响,适合表示日期时间或者大程序程序的计时
>>> import time
>>> print(time.time())
1612746275.0404444
time.localtime([secs])
将一个时间戳转换为当前时区的struct_time,即时间数组格式的时间
>>> import time
>>> local_time = time.localtime()
>>> print(local_time)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=9, tm_sec=26, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> secs = time.time()
>>> print(time.localtime(secs))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=10, tm_sec=46, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> print(secs)
1612746646.4186494
time.gmtime([secs])
将一个时间戳转换为UTC时区(0时区)的struct_time
>>> import time
>>> print(time.gmtime())
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=1, tm_min=14, tm_sec=40, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> secs = time.time()
>>> print(time.gmtime(secs))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=1, tm_min=14, tm_sec=49, tm_wday=0, tm_yday=39, tm_isdst=0)
time.mktime(t)
将一个struct_time转化为时间戳,如果输入的值不是一个合法的时间,将触发 OverflowError 或 ValueError
>>> import time
>>> t = time.localtime()
>>> print(t)
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=16, tm_sec=31, tm_wday=0, tm_yday=39, tm_isdst=0)
>>> print(time.mktime(t))
1612746991.0
time.sleep(secs)
线程推迟指定的时间运行,线程睡眠指定时间,单位为秒
//ex_2.py
# -*- coding: utf-8 -*-
#time.sleep(10)
import time
start_time = time.time()
print('start:', start_time)
time.sleep(10)
end_time = time.time()
print('end:', end_time)
print('end_time - start_time = ', end_time - start_time)
'''
start: 1612747306.490495
end: 1612747316.491094
end_time - start_time = 10.000599145889282
[Finished in 10.1s]
'''
time.clock()
以浮点数计算的秒数返回当前的CPU时间。用来衡量不同程序的耗时,比time.time()更有用。
注意报错:
DeprecationWarning: time.clock has been deprecated in Python 3.3 and will be removed from Python 3.8: use time.perf_counter or time.process_time instead start_time = time.clock()
time.perf_counter() :
返回性能计数器的值(以小数秒为单位)作为浮点数,具有最高可用分辨率的时钟,perf_counter() 会包含 sleep() 休眠时间,适用测量短持续时间
time.process_time() :
返回当前进程的系统和用户CPU时间总和的值(以小数秒为单位)作为浮点数,process_time()不包括sleep()休眠时间期间经过的时间详细看https://blog.csdn.net/qq_27283619/article/details/89280974
在不同的系统上含义不同:
- 在unix系统中,它返回的是“进程时间”,它是用秒表示的浮点数(时间戳)。
- 在windows系统中,第一次调用,返回的是进程运行时实际时间(即为 0s )。而第二次及之后的调用是自第一次调用以后到现在的运行时间。
用法:
- 在第一次调用的时候,返回的是程序开始运行的实际时间(即为 0s );
- 第二次之后的调用,返回的是自第一次调用后,到这次调用的时间间隔。
在win32系统下,这个函数返回的是真实时间(wall time),而在Unix/Linux下返回的是CPU时间。
//ex_3.py
# -*- coding: utf-8 -*-
#time.clock()
import time
start_time = time.clock()
print('start:', start_time)
time.sleep(10)
end_time = time.clock()
print('end:', end_time)
print('end_time - start_time = ', end_time - start_time)
'''
start: 0.0501046
end: 10.0493474
end_time - start_time = 9.999242800000001
[Finished in 10.1s]
'''
time.asctime([t])
把一个表示时间的元组或者struct_time表示为 'Sun Aug 23 14:31:59 2015' 这种形式。如果没有给参数,会将time.localtime()作为参数传入。
>>> import time
>>> local_time = time.localtime()
>>> print(time.asctime(local_time))
Mon Feb 8 09:47:15 2021
time.ctime([secs])
把一个时间戳(按秒计算的浮点数)转化为time.asctime()的形式。如果为指定参数,将会默认使用time.time()作为参数。
>>> import time
>>> secs = time.time()
>>> print(time.ctime(secs))
Mon Feb 8 09:49:23 2021
time.strftime(format [, t])
把一个代表时间的元组或者struct_time(如由time.localtime()和time.gmtime()返回)转化为格式化的时间字符串,格式由参数format决定。如果未指定,将传入time.localtime()。如果元组中任何一个元素越界,就会抛出ValueError的异常。函数返回的是一个可读表示的本地时间的字符串。
>>> import time
>>> local_time = time.localtime()
>>> print(time.strftime("%Y-%m-%d %H:%M:%S %p", local_time))
2021-02-08 09:55:02 AM
>>> print(time.strftime('%H:%M:%S')) //不加 t 则默认当前时间
09:59:08
time.strptime(string[,format])
将格式字符串转化成 struct_time 。
注意:使用strptime()函数将一个指定格式的时间字符串转化成元组时,参数format的格式必须和string的格式保持一致
>>> import time
>>> pattern = '%Y-%m-%d %H:%M:%S %p'
>>> date = '2021-02-08 09:55:02 AM'
>>> print(time.strptime(date, pattern))
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=8, tm_hour=9, tm_min=55, tm_sec=2, tm_wday=0, tm_yday=39, tm_isdst=-1)
详细请看
https://blog.csdn.net/liagn/article/details/82597472
https://www.cnblogs.com/xtsec/p/6682052.html