在Python中,如何将自纪元以来的秒转换为`datetime`对象?

352 投票
6 回答
428384 浏览
提问于 2025-04-16 04:02

可以通过自1970年1月1日以来的秒数来初始化time模块:

import time
t1 = time.gmtime(1284286794)
t1
time.struct_time(tm_year=2010, tm_mon=9, tm_mday=12, tm_hour=10, tm_min=19, 
                 tm_sec=54, tm_wday=6, tm_yday=255, tm_isdst=0)

有没有一种简单优雅的方法来以同样的方式初始化一个datetime.datetime对象呢?

6 个回答

53

根据文档,从自1970年1月1日以来的秒数获取一个带时区的日期时间对象的推荐方法是:

Python 3

from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)

Python 2,使用 pytz

from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
62

从纪元开始的秒数转换为 datetime 对象,然后再用 strftime 格式化显示:

>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
548

如果你知道时区的话,可以使用datetime.datetime.fromtimestamp,这样就能得到和time.gmtime一样的结果。

>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)

或者

>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)

撰写回答