time
模块可以使用epoch后的秒来初始化:
>>> 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
对象的优雅方法?
答案 0 :(得分:338)
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)
答案 1 :(得分:29)
>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
答案 2 :(得分:15)
从文档中,建议的方法是从epoch以来的秒数获取时区感知日期时间对象:
from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)
from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
答案 3 :(得分:7)
请注意,1970年1月1日之前的日期,Windows上的datetime.datetime。fromtimestamp(时间戳)和。utcfromtimestamp(时间戳)失败,而负的unix时间戳似乎适用于基于unix的平台。文档说这个:
答案 4 :(得分:1)
对于那些希望符合ISO 8601的用户,因为其他解决方案没有T
分隔符和时间偏移( Meistro 的答案除外):
from datetime import datetime, timezone
result = datetime.fromtimestamp(1463288494, timezone.utc).isoformat('T', 'microseconds')
print(result) # 2016-05-15T05:01:34.000000+00:00
请注意,我使用fromtimestamp
是因为如果我使用utcfromtimestamp
,则无论如何都需要在.astimezone(...)
上链以获取偏移量。
如果您不想一路走到microseconds
,可以使用
isoformat()方法。