Python3种时间格式及其转换
Python时间格式时间戳Python的时间戳是以秒为单位的浮点数,表示的是从1970年1月1日零点(历元)过了多少秒。time.time()可以获取当前时间的时间戳。import timeprint(time.time())'''输出:1627972212.346446'''时间戳适合做时间的运算和比较。时间元组python中有一个用9位数字组装起来的元组,用来表示时间。例如time.struc
Python时间格式
Python的时间戳是以秒为单位的浮点数,表示的是从1970年1月1日零点(历元)过了多少秒。time.time()可以获取当前时间的时间戳。
import time
print(time.time())
'''
输出:1627972212.346446
'''
时间戳适合做时间的运算和比较。
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 月份,1 到 12
tm_mday 一个月中的第几天,1 到 31
tm_hour 小时,0 到 23
tm_min 分钟,0 到 59
tm_sec 秒,0 到 61 (60或61 是闰秒)
tm_wday 星期几,0到6 (0是周一)
tm_yday 一年中的第几天,1 到 366
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)
'''
格式化的时间指的是形如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各种时间格式的转换
时间戳转时间元组
对于时间戳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。
时间元组转格式化时间
时间元组转格式化时间可以用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)
'''
时间戳转格式化时间
如果想获取形如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()将时间元组转化为时间戳
总结一下,上面的转化关系可以用下面的一张图表示。
更多推荐
所有评论(0)