关于time模块的学习总结
1、Python中时间格式有三种:时间戳(Timestap)、时间元组(Struct_time)、字符串时间(Format string)。
下面来介绍下这三个时间
时间戳(Timestap):
例:
1 import time
2 print(time.time())
输出:
1664370911.143787
通过time.time()可以获得一个float型的数据,这个值是从1970纪元到现在这个时刻经过的浮点秒数。所以时间戳就是一个秒数。
时间元组(Struct_time):
1 import time
2 time1 = time.localtime()
3 print(type(time1))
4 print(time1)
输出:
<class 'time.struct_time'>
time.struct_time(tm_year=2022, tm_mon=9, tm_mday=28, tm_hour=21, tm_min=25, tm_sec=53, tm_wday=2, tm_yday=271, tm_isdst=0)
通过结果输出结果来看,虽然我们叫时间元组,但是并不是一个元组,而是一个特有的关于时间的数据结构。如果想获得这个“元祖”里的某一个值,比如年或者月,可以用索引获取。
例如,time1[0]的方式可以获得年,time1[1]可以获得月。当然Python里是有对应的类,所以可以通过属性获得。例如time1. tm_year可以获得年,time1. tm_mon可以获得月。
字符串时间(Format string):
如果说时间戳是给计算机看的,那么字符串时间就是给人看的。
例如:'2020-08-28:15:20:28'
2、三种时间的一个转换关系
(1)时间元组(Struct_time)转成字符串时间(Format string)
——time.strftime(format, p_tuple=None)
Strftime()参数有两个,format是字符串时间格式,必须写不能空缺;p_tuple是时间元组,可以空缺,如果空缺默认为当前时间。也就是说函数功能是将第二种数据类型转为第一种数据类型。
例如,我们想将现在的时间通过“2020-1-28 8:15:00”的形式表示出现在的时间来,要先将字符串格式定义好,即'%Y-%m-%d %H:%M:%S'。
具体格式可以参照下表:
时间戳的话用当前的时间,通过time.localtime()获得。综上所述:
1 print(time.strftime('%Y-%m-%d %H:%M:%S',time.localtime()))
输出:
2022-09-28 22:33:27
(2)字符串时间(Format string)转成时间元组(Struct_time)
——time.strptime(string, format)
在上一个例子中,我们获得的时间元祖是通过time.localtime()获得的,如果我们想创建一个时间元组,设置特定的时间点,该如何做呢?可以利用字符串时间转成时间元组。使用time.strptime()。
这个函数可以理解为是time.strftime()反过程,string相当于strftime()的返回结果,format就是strftime()中的format,通过%所表述的时间格式。
例如:
print(time.strptime("2022-09-28 22:33:27",'%Y-%m-%d %H:%M:%S'))
输出:
time.struct_time(tm_year=2022, tm_mon=9, tm_mday=28, tm_hour=22, tm_min=33, tm_sec=27, tm_wday=2, tm_yday=271, tm_isdst=-1)
(3)时间元组(Struct_time)转成时间戳(Timestap)
——mktime(p_tuple),参数为时间元组。
例如:
print(time.mktime(time.localtime()))
输出:
1664376976.0
前边提到过time.localtime()可以获得当前的时间元组,当然可以通过(2)部分自己构造一个特定的时间元组,这里不再尝试。
(4)时间戳(Timestap)转成时间元组(Struct_time)
——gmtime(seconds=None)参数为浮点数的秒,空缺默认为当前时间戳。
例如:
print(time.gmtime(1664376976.0))
time.struct_time(tm_year=2022, tm_mon=9, tm_mday=28, tm_hour=14, tm_min=56, tm_sec=16, tm_wday=2, tm_yday=271, tm_isdst=0)
time.gmtime()的用法看起来和time.localtime()都可以获得struct_time类型的时间元组,但是略有区别。
print(time.gmtime())
print(time.localtime())
输出:
time.struct_time(tm_year=2022, tm_mon=9, tm_mday=28, tm_hour=15, tm_min=8, tm_sec=45, tm_wday=2, tm_yday=271, tm_isdst=0)
time.struct_time(tm_year=2022, tm_mon=9, tm_mday=28, tm_hour=23, tm_min=8, tm_sec=45, tm_wday=2, tm_yday=271, tm_isdst=0)
简单来说,time.gmtime()获得的是UTL时间,time.localtime()获得的是北京时间。这两个时间相差8个小时。什么是UTL时间,大家可以自行查阅。