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对象?
对于相反的操作,请执行以下操作:convert-a-datetime-object-to-seconds
datetime.datetime.fromtimestamp会做,如果你知道时间区,你可以produce相同的输出级与time.gmtime P / < >
>>> datetime.datetime.fromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 11, 19, 54)
或 P / < >
>>> datetime.datetime.utcfromtimestamp(1284286794)
datetime.datetime(2010, 9, 12, 10, 19, 54)
奇怪的是,datetime.utcfromtimestamp创建了一个简单的时间戳。我不得不使用import pytz和datetime.fromtimestamp(1423524051, pytz.utc)创建一个感知日期时间。
作为上述步骤的后续步骤,如果只需要UTC时间戳,那么使用python>=3.2,您不必导入pytz库—只需要from datetime import datetime, timezone然后按如下方式调用它:datetime.fromtimestamp(1423524051, timezone.utc)。当我只需要pytz中的UTC时区时,它已经保存了很多次额外的库。
由于时代到datetime秒到strftime: P / < >
>>> ts_epoch = 1362301382
>>> ts = datetime.datetime.fromtimestamp(ts_epoch).strftime('%Y-%m-%d %H:%M:%S')
>>> ts
'2013-03-03 01:03:02'
从文档,建议的方式得到的-意识的日期时间对象从秒由于时代: P / < >
Python 3: P / < >
from datetime import datetime, timezone
datetime.fromtimestamp(timestamp, timezone.utc)
Python的2,用pytz: P / < >
from datetime import datetime
import pytz
datetime.fromtimestamp(timestamp, pytz.utc)
在您的副标题("python 3"、"python 2")中提供一个到文档的链接是很有用的,我还建议您更改它们的顺序。
已更新。保留相同的顺序,因为这与python文档匹配。
你不需要pytz来获取utctzinfo对象。你自己创造它很容易
注意,datetime.datetime.fromtimestamp(timestamp)和.utcfromtimestamp(timestamp失败)在Windows dates之前,1月为1。20世纪70年代,而消极的UNIX timestamps似乎工作的C - platforms UNIX为基础的。"文档说: P / < >
"This may raise ValueError, if the timestamp is out of the range of
values supported by the platform C gmtime() function. It’s common for
this to be restricted to years in 1970 through 2038"
看到也issue1646728 P / < >
:o)是的,还需要23年才能修好。
你可以用utc_time = datetime(1970,1,1) + timedelta(seconds=timestamp)来解决这个问题。