Python的time模块提供了各种与时间相关的函数。我们可以获取当前时间、操作时间日期、计算两个时间差等。
时间有两种标准表示法:
- 数字表示: 整数或浮点数,通常是自从1970年1月1日以来的秒数。
- 9个整数组成的元组:元组项包含年份,月份,天,小时,分钟,秒,星期,一年中的第几天,夏令时标志。
使用time模块
要使用 time模块,直接导入它即可。
import time
以下是time模块提供的主要功能函数
获取数字表示法的函数
1. time()
不带参数,返回时间浮点数,时间是自1970年1月1日以来的秒数。
测试代码:
print(time.time())
执行后结果:
1725070125.995992
2. time_ns()
不带参数,返回时间整数,时间是自1970年1月1日以来的纳秒数。(1秒=10的9 次方纳秒)
测试代码:
print(time.time_ns())
执行后结果:
1725070125995997000
我们除以10的9次方得到的结果就是秒。
还有其他一些函数monotonic(),perf_counter(),process_time(),thread_time()也会返回数字时间,平常不太常用,不过多介绍。
计算时间之差
以上time() 和time_ns函数返回的是浮点数或者整数,所以可以用于计算时间之差。
举例:打印执行代码前和代码后的时间,并计算时间之差。
now_time = time.time()
print(f'当前时间:{now_time}')#执行代码sleep 5s
time.sleep(5)after_time = time.time()
print(f'等待以后:{after_time}')print(f'时间之差:{after_time - now_time}')
结果:
当前时间:1725097798.896244
等待以后:1725097803.901393
时间之差:5.005148887634277
获取元组表示法的函数
3 gmtime(seconds=None)
返回的是UTC时间的元组(中国位于8时区,UTC时间是比当前时间往前8个小时的时间。)
该函数返回的是time.struct_time类对应的时间元组,struct_time类代码如下:
关于参数:
- 不传seconds秒数,获取的是当前时间对应UTC的时间元组。
- 传seconds秒数,获取的是从1970年1月1日以来加上传的秒数对应的时间元组。
测试代码:
#打印当前UTC时间
print(time.gmtime())
结果:
time.struct_time(tm_year=2024, tm_mon=8, tm_mday=31, tm_hour=3, tm_min=10, tm_sec=27, tm_wday=5, tm_yday=244, tm_isdst=0)
#打印1970年1月1日以来加上36000秒的时间(10个小时)
print(time.gmtime(36000))
结果:
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=10, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
4 localtime(seconds=None)
返回的是当前时间的元组。等价于gmtime函数获取的时间加上所在时区,使用方法和gmtime函数一致。
关于参数:
- 不传seconds秒数,获取的是当前时间元组。
- 传seconds秒数,获取的是从1970年1月1日以来加上传的秒数对应的时间元组。
测试代码:
#打印当前时间
print(time.localtime())
结果:
time.struct_time(tm_year=2024, tm_mon=8, tm_mday=31, tm_hour=11, tm_min=34, tm_sec=10, tm_wday=5, tm_yday=244, tm_isdst=0)
#打印1970年1月1日以来加上36000秒的时间(10个小时)
print(time.localtime(36000))
结果:区别是小时数加上了时区
time.struct_time(tm_year=1970, tm_mon=1, tm_mday=1, tm_hour=18, tm_min=0, tm_sec=0, tm_wday=3, tm_yday=1, tm_isdst=0)
将时间转换为可读性强的函数
5 asctime(p_tuple=None)
asctime()函数将struct_time元组对象转换为一个可读的、24小时制的时间字符串。这个字符串的格式是固定的,类似于'Sun Jun 20 09:21:05 2024'。
关于参数:
- 不传p_tuple,获取的是当前时间。
- 传p_tuple,获取的是对应p_tuple时间元组转换后的时间。
测试代码:
#打印当前时间
print(time.asctime())
结果:Sat Aug 31 12:35:05 2024
#打印传入时间localtime函数获取的时间元组转换后的时间
print(time.asctime(time.localtime(36000000)))
结果:Mon Feb 22 00:00:00 1971
6 ctime(seconds=None)
ctime()函数将传入的时间戳秒数转换为一个可读的、24小时制的时间字符串。这个字符串的格式是固定的,类似于'Sun Jun 20 09:21:05 2024'。
关于参数:
- 不传seconds秒数,获取的是当前时间。
- 传seconds秒数,获取的是对应seconds秒数转换后的时间。
测试代码:
#打印当前时间
print(time.ctime())
结果:Sat Aug 31 12:35:05 2024
#打印传入时间localtime函数获取的时间元组转换后的时间
print(time.ctime(36000000))
结果:Mon Feb 22 00:00:00 1971
转为时间戳的函数
7 mktime(p_tuple=None)
mktime()函数必须传一个p_tuple时间元组,将struct_time元组对象转换为时间戳(时间戳为自1970年1月1日以来的秒数),
关于参数:
参数可以是time.gmtime()或者time.localtiime()获取到的时间元组。
测试代码:
#打印传入时间localtime函数获取的时间元组转换后的时间戳
print(time.mktime(time.localtime()))
结果:1725082686.0
时间格式化-将时间元组转为一定格式的字符串
8 strftime(format,p_tuple=None)
strftime()函数必须传一个p_tuple时间元组,将struct_time元组对象转换为时间戳(时间戳为自1970年1月1日以来的秒数)。
参数:
- format:传入如下时间格式组成的字符串。
%Y:年份,比如2024
%m:月份,比如01,02,直到12
%d:天数,比如一个月中的第1天,第2天,直到第31天
%H:小时,为24小时制,比如从00,01直到23
%M:分钟,比如从00,01直到59
%S:秒数,比如从00,01直到59
%z: UTC时区偏移
%a :缩写的星期几,比如Sat代表星期六
%L:完整的星期几,比如Staturday代表星期六
%b:缩写的月份,比如Aug代表8月份
%B :完整的月份,比如August代表8月份
%c:按照一定格式展示,比如Sat Aug 31 14:01:17 2024
%I:小时,为12进制。比如01,02,直到12
%p: AM或PM
- p_tuple:传入时间元组,将时间元组按照format格式转为我们想要的时间格式。如果不传,默认使用localtime函数获取的当前时间元组。
测试代码:
print(time.strftime('%Y%m%d%H%M%S'))
结果:20240831140117
print(time.strftime('%Y-%m-%d-%H-%M-%S'))
结果:2024-08-31-14-01-17
print(time.strftime('%Y-%m-%d,%H-%M-%S,%a,%A,%b,%B,%c,%l,%p'))
结果:2024-08-31,14-01-17,Sat,Saturday,Aug,August,Sat Aug 31 14:01:17 2024, 2,PM
时间格式化-将时间字符串转为时间元组
9 strptime(string,format)
strptime()函数将时间字符串按照格式转为时间元组。
format参数的使用如strftime函数中的介绍。
string参数传入的是时间字符串,同样跟strftime函数返回的字符串一样。
要注意:format格式和string的格式要一致,否则报错。
比如时间字符串’20240831173340’对应的格式’%Y%m%d%H%M%S’,时间字符串’2024-08-31-17-33-40’对应的格式’%Y-%m-%d-%H-%M-%S’
测试代码:
print(time.strptime('20240831173340','%Y%m%d%H%M%S'))
结果:
time.struct_time(tm_year=2024, tm_mon=8, tm_mday=31, tm_hour=17, tm_min=33,tm_sec=40, tm_wday=5, tm_yday=244, tm_isdst=-1)
print(time.strptime(time.strftime('%Y-%m-%d,%H-%M-%S,%a,%b'),'%Y-%m-%d,%H-%M-%S,%a,%b'))
结果:
time.struct_time(tm_year=2024, tm_mon=8, tm_mday=31, tm_hour=17, tm_min=36, tm_sec=28, tm_wday=5, tm_yday=244, tm_isdst=-1)
sleep等待
10 sleep(seconds)
是非常常用的函数,表示等待给定的秒数,再继续执行后续代码。可传入整数或者浮点数的秒数。比如sleep(5.5)表示等待5.5s。
测试代码:
print(f'当前时间:{time.asctime()}')
time.sleep(5)
print(f'等待以后:{time.asctime()}')结果:时间等待5s才执行后续代码。
当前时间:Sat Aug 31 17:44:13 2024
等待以后:Sat Aug 31 17:44:18 2024
共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”
-----指水滴不断地滴,可以滴穿石头;
-----比喻坚持不懈,集细微的力量也能成就难能的功劳。
----感谢读者的阅读和学习,谢谢大家。