python内置模块time详解(我们需要了解的多种时间格式)

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

共勉: 东汉·班固《汉书·枚乘传》:“泰山之管穿石,单极之绠断干。水非石之钻,索非木之锯,渐靡使之然也。”

-----指水滴不断地滴,可以滴穿石头;

-----比喻坚持不懈,集细微的力量也能成就难能的功劳。

----感谢读者的阅读和学习,谢谢大家。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值