我想将纪元时间戳(例如,et = 1351036517.179364)转换为datetime.datetime对象。到目前为止,我已经使用了time.ctime(et),它给了我一串像“Fri Oct 5 22:20:33 2012”的字样。
最终,我需要datetime对象来计算两个数据点之间的时差,另一个数据点也是一个datetime对象。
谢谢!
答案 0 :(得分:2)
值得记住时间戳没有关联的时区信息。 Unix time是明确的UTC,但将本地时间存储在 Unix风格的时间戳中并不罕见。您必须检查已知的引用以确定。
如果您的时间戳已经是UTC(Unix时间),您可以使用Marc B的建议直接减去两个unix时间戳,以获得它们之间的差异秒数。
然后,您可能想要创建一个timedelta,这样您就可以轻松地使用它来操纵datetime
(例如,您可以将时间值与日期时间相加或相减)。
datetime.timedelta( seconds= n_seconds )
如果您的时间戳是当地时间,请不要直接减去它们,因为您可能会得到可能不正确的结果。
相反,您应首先使用datetime.fromtimestamp,attach a timezone to each datetime,然后再减去它们以获得timedelta。
要从timedelta
转换回秒数,假设你使用的是python 2.7,那就是timedelta.total_seconds。如果您有早期版本,则必须手动进行计算,或pip install datetime
答案 1 :(得分:1)
将POSIX时间戳转换为表示UTC时间的datetime.datetime
对象:
from datetime import datetime, timedelta, timezone
timestamp = 1351036517.179364
utc_time = datetime(1970, 1, 1, tzinfo=timezone.utc) + timedelta(seconds=timestamp)
# -> 2012-10-23 23:55:17.179363+00:00
如果您的Python版本不支持datetime.timezone
;你可以省略它,以UTC形式获得一个天真的日期时间对象。
我需要datetime对象来计算两个数据点之间的时差,另一个数据点也是一个日期时间对象。
如果天真datetime
个对象代表具有不同UTC偏移的本地时间,则无法直接比较它们,否则可能会得到错误的结果。您需要时区感知日期时间对象,或者您应该首先将datetime对象转换为UTC。参见
答案 2 :(得分:1)
这适用于那些使用标题绘制的人,但却得到了OP问题的答案
fromtimestamp
返回与POSIX时间戳对应的本地日期
这是一个示例(由python生成)
import datetime as dt
epoch = int(dt.datetime.utcnow().timestamp()) # example output: 1520020585
给定时间戳(例如1520020585
),我们将其转换回日期时间tz天对象使用fromtimestamp
,如下所示:
import datetime as dt
ts = 1520020585 # remember me? I'm the epoch
dt.datetime.fromtimestamp(ts). # outputs: datetime.datetime(2018, 3, 2, 13, 56, 25)