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

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

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

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

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

    作者:科雷learning

    物联沃分享整理
    物联沃-IOTWORD物联网 » Python time模块详解:多种时间格式全面解析

    发表回复