Python时间格式

  1. 时间戳

Python的时间戳是以秒为单位的浮点数,表示的是从1970年1月1日零点(历元)过了多少秒。time.time()可以获取当前时间的时间戳。

import time
print(time.time())  
'''
输出:1627972212.346446
'''

时间戳适合做时间的运算和比较。

  1. 时间元组
    python中有一个用9位数字组装起来的元组,用来表示时间。例如
time.struct_time(tm_year=2012, tm_mon=11, tm_mday=11, tm_hour=2, tm_min=30, tm_sec=12, tm_wday=6, tm_yday=316, tm_isdst=0)

上面的元组中,各个变量的含义如下:

tm_year		年份
tm_mon		月份,112
tm_mday		一个月中的第几天,131
tm_hour		小时,023
tm_min		分钟,059
tm_sec		秒,061 (6061 是闰秒)
tm_wday		星期几,06 (0是周一)
tm_yday		一年中的第几天,1366
tm_isdst  	是否为夏令时,值有:1(夏令时)0(不是夏令时)-1(未知),默认 -1

时间元组的创建可以使用time.struct_time(),该方法接受一个至少9位数字的元组或一个时间元组变量作为参数

import time
t1 = time.struct_time((2012, 11, 11, 2, 30, 12, 6, 316, 1, 4))
print(t1)
t2 = time.struct_time(t1)
print(t2)
'''
输出:
time.struct_time(tm_year=2012, tm_mon=11, tm_mday=11, tm_hour=2, tm_min=30, tm_sec=12, tm_wday=6, tm_yday=316, tm_isdst=1)
time.struct_time(tm_year=2012, tm_mon=11, tm_mday=11, tm_hour=2, tm_min=30, tm_sec=12, tm_wday=6, tm_yday=316, tm_isdst=1)
'''
  1. 格式化时间

格式化的时间指的是形如2016-03-20 11:45:39这种类型的字符串。
python的格式化时间经常要用到时间日期格式化符号,这些符号的含义如下:

  • %y 两位数的年份表示(00-99)
  • %Y 四位数的年份表示(000-9999)
  • %m 月份(01-12)
  • %d 月内中的一天(0-31)
  • %H 24小时制小时数(0-23)
  • %I 12小时制小时数(01-12)
  • %M 分钟数(00=59)
  • %S 秒(00-59)
  • %a 本地简化星期名称
  • %A 本地完整星期名称
  • %b 本地简化的月份名称
  • %B 本地完整的月份名称
  • %c 本地相应的日期表示和时间表示
  • %j 年内的一天(001-366)
  • %p 本地A.M.或P.M.的等价符
  • %U 一年中的星期数(00-53)星期天为星期的开始
  • %w 星期(0-6),星期天为星期的开始
  • %W 一年中的星期数(00-53)星期一为星期的开始
  • %x 本地相应的日期表示
  • %X 本地相应的时间表示
  • %Z 当前时区的名称
  • %% %号本身
    例如2016-03-20 11:45:39的格式化时间符号为%Y-%m-%d %H:%M:%S

Python各种时间格式的转换

  1. 时间戳和时间元组互转
时间戳转时间元组

对于时间戳t1,time.localtime(t1)可以获取t1对应的时间元组。该函数语法为localtime(secs: Optional[float]=…),如果localtime()里面没有参数,将会返回当前时间的时间元组。

import time
print(time.localtime(1756435812))
'''
输出:
time.struct_time(tm_year=2025, tm_mon=8, tm_mday=29, tm_hour=10, tm_min=50, tm_sec=12, tm_wday=4, tm_yday=241, tm_isdst=0)
'''
print(time.localtime())
'''
输出:
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=3, tm_hour=15, tm_min=23, tm_sec=28, tm_wday=1, tm_yday=215, tm_isdst=0)
'''

如果想将一个时间戳转化为UTC时区的时间元组,可以使用time.gmtime(),该函数使用方法和localtime相同。

import time
print(time.gmtime(1756435812))
'''
输出:
time.struct_time(tm_year=2025, tm_mon=8, tm_mday=29, tm_hour=2, tm_min=50, tm_sec=12, tm_wday=4, tm_yday=241, tm_isdst=0)
'''
print(time.gmtime())
'''
输出:
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=4, tm_hour=2, tm_min=12, tm_sec=45, tm_wday=2, tm_yday=216, tm_isdst=0)
'''
时间元组转时间戳

可以用time.mktime()将时间元组转化为时间戳,mktime的语法为mktime(t: Union[_TimeTuple, struct_time]),即一个时间元组或元组

import time
time1 = time.localtime(123456789.9234)
print(time1)
print(time.mktime(time1))
print(time.mktime((2012, 11, 11, 2, 30, 12, 6, 316, 0)))
'''
输出:
time.struct_time(tm_year=1973, tm_mon=11, tm_mday=30, tm_hour=5, tm_min=33, tm_sec=9, tm_wday=4, tm_yday=334, tm_isdst=0)
123456789.0
1352572212.0
'''
# 从这个例子可以看出,time.mktime返回的浮点数小数点后为0。
  1. 时间元组和格式化时间互转
时间元组转格式化时间

时间元组转格式化时间可以用time.strftime()。该函数语法为def strftime(format: str, t: Union[_TimeTuple, struct_time]=…),format表示格式化字符串,Union表示时间元组,可以为时间元组变量或至少9位数字的元组。

import time
time1 = time.localtime(123456789)
print(time1)
print(time.strftime('%Y-%m-%d %H:%M:%S', time1))
print(time.strftime('%b %d, %Y %I:%M:%S %p', time1))
time2 = time.struct_time((2012, 11, 11, 2, 30, 12, 6, 316, 0))
print(time.strftime('%Y-%m-%d %H:%M:%S', time2))
print(time.strftime('%b %d, %Y %I:%M:%S %p', time2))
'''
输出:
1973-11-30 05:33:09
Nov 30, 1973 05:33:09 AM
2012-11-11 02:30:12
Nov 11, 2012 02:30:12 AM
'''

此外,如果想输出形如Tue Aug 3 14:59:40 2021(即%a %b %d %H:%M:%S %Y)的格式化时间,可以直接使用time.asctime(),该函数接受一个时间元组或至少9位数字的元组作为参数

import time
print(time.asctime((2012, 11, 11, 2, 30, 12, 6, 316, 0)))
print(time.asctime(time.struct_time((2012, 11, 11, 2, 30, 12, 6, 316, 0))))
'''
输出:
Sun Nov 11 02:30:12 2012
Sun Nov 11 02:30:12 2012
'''
格式化时间转时间元组

格式化时间转时间元组主要用到time.strptime()函数,该函数语法为strptime(string: str, format: str=…),string表示时间字符串,format表示格式化字符串。如果只输入string参数,需要保证string符合形如Tue Aug 3 14:59:40 2021的格式(刚好和time.asctime()的输出对应)。

import time
print(time.strptime('Nov 30, 1973 05:33:09 AM', '%b %d, %Y %I:%M:%S %p'))
print(time.strptime('Tue Aug  3 14:59:40 2021'))
'''
输出:
time.struct_time(tm_year=1973, tm_mon=11, tm_mday=30, tm_hour=5, tm_min=33, tm_sec=9, tm_wday=4, tm_yday=334, tm_isdst=-1)
time.struct_time(tm_year=2021, tm_mon=8, tm_mday=3, tm_hour=14, tm_min=59, tm_sec=40, tm_wday=1, tm_yday=215, tm_isdst=-1)
'''
  1. 时间戳和格式化时间
时间戳转格式化时间

如果想获取形如Tue Aug 3 14:59:40 2021的格式化时间,可以使用time.ctime(),该函数语法为ctime(secs: Optional[float]=…),没有参数时输出当前时间的格式化时间。它的作用相当于asctime(localtime(secs))。

import time
print(time.ctime(1756435812))
'''
输出:
Fri Aug 29 10:50:12 2025
'''
print(time.ctime())
'''
输出:
Wed Aug  4 10:16:02 2021
'''

想要获取其他形式的格式化时间,可以先将时间戳转化为时间元组,再将时间元组转化为格式化时间。

格式化时间转时间戳

格式化时间转时间戳可以先用time.strptime()格式化时间转化为时间元组,再利用time.mktime()将时间元组转化为时间戳

  1. 小结

总结一下,上面的转化关系可以用下面的一张图表示。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐