1. 介绍
2. 表示时间的三种方式
2.1. 时间戳
时间戳表示的是从1970年1月1日00:00:00开始按秒计算的偏移量。我们运行“type(time.time())”,返回的是float类型。时间戳是一个秒数(便于计算),1970年是Unix的诞生时间。主要是便于计算时间。
import time
# 生成timestamp
time.time()
2.2. 元组
struct_time元组共有9个元素:(年,月,日,时,分,秒,一年中第几周,一年中第几天,夏令时) 。主要是便于操作某一个时间年/月/日等。
索引(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.localtime()
2.3. 格式化的时间字符串
格式化时间,已格式化的结构使时间更具可读性。包括自定义格式和固定格式。
time.strftime("%Y-%m-%d")
Python中时间日期格式化符号:
3. 常用方法
3.1. 返回时间戳
- 当前时间的时间戳:time.time()
- 时间元组→时间戳:time.mktime(<时间元组>)
>>> import time
>>> time.mktime((1972,1,1,1,1,1,0,0,0))
63046861.0
3.2. 返回时间元组(struct_time)
- 时间戳→时间元组(当地):time.localtime(<时间戳>)
- 时间戳→时间元组(格林威治):time.gmtime(<时间戳>)
- 格式化时间→时间元组:time.strptime(<自定义的格式>, <%符号>)
>>> import time
>>> time.localtime(15564845527)
time.struct_time(tm_year=2463, tm_mon=3, tm_mday=26, tm_hour=0, tm_min=12, tm_sec=7, tm_wday=0, tm_yday=85, tm_isdst=0)
>>> time.gmtime(15564845527)
time.struct_time(tm_year=2463, tm_mon=3, tm_mday=25, tm_hour=16, tm_min=12, tm_sec=7, tm_wday=6, tm_yday=84, tm_isdst=0)
>>> time.strptime('2011-05-05 16:37:06', '%Y-%m-%d %X')
time.struct_time(tm_year=2011, tm_mon=5, tm_mday=5, tm_hour=16, tm_min=37, tm_sec=6, tm_wday=3, tm_yday=125, tm_isdst=-1)
3.3. 返回格式化时间
- 时间元组→自定义格式:time.strftime(<格式化的符号>,<时间元组>)
- 时间元组→标准格式:time.asctime(<时间元组>)
- 时间戳→标准格式:time.ctime(<时间戳>)
>>> import time
>>> time.strftime('%Y-%m-%d %X',(1972,1,1,1,1,1,0,0,0))
'1972-01-01 01:01:01'
>>> time.asctime((1972,1,1,1,1,1,0,0,0))
'Mon Jan 1 01:01:01 1972'
>>> time.ctime(15564845527)
'Mon Mar 26 00:12:07 2463'
相互转换关系图:
4. 时间控制
4.1. time.sleep()
推迟调用线程的运行的秒数:time.sleep(<秒数>)。
4.2. time.perf_counter()
返回计时器的精准时间(系统的运行时间),包含整个系统的睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
4.3. time.process_time()
返回当前进程执行 CPU 的时间总和,不包含睡眠时间。由于返回值的基准点是未定义的,所以,只有连续调用的结果之间的差才是有效的。
5. 案例:计算时间差
start_time = '2022-06-12 9:0:0'
end_time = '2023-07-13 10:24:0'
s1 = time.strptime(start_time,"%Y-%m-%d %H:%M:%S")
s2 = time.strptime(end_time,"%Y-%m-%d %H:%M:%S")
# print('过去了%s小时%s分钟'%(s2.tm_hour-s1.tm_hour,s2.tm_min-s1.tm_min))
tt1 = time.mktime(s1)
tt2 = time.mktime(s2)
diff_time = tt2-tt1
tt3 = time.gmtime(diff_time)
print('过去了{}年{}月{}天{}小时{}分钟{}秒'.format(tt3.tm_year-1970,tt3.tm_mon-1,tt3.tm_mday-1,tt3.tm_hour-0,tt3.tm_min-0,tt3.tm_sec-0))