将纪元时间戳转换为datetime.datetime对象

时间:2012-11-13 19:03:00

标签: python datetime epoch

我想将纪元时间戳(例如,et = 1351036517.179364)转换为datetime.datetime对象。到目前为止,我已经使用了time.ctime(et),它给了我一串像“Fri Oct 5 22:20:33 2012”的字样。

最终,我需要datetime对象来计算两个数据点之间的时差,另一个数据点也是一个datetime对象。

谢谢!

3 个答案:

答案 0 :(得分:2)

值得记住时间戳没有关联的时区信息Unix time是明确的UTC,但将本地时间存储在 Unix风格的时间戳中并不罕见。您必须检查已知的引用以确定。


如果您的时间戳已经是UTC(Unix时间),您可以使用Marc B的建议直接减去两个unix时间戳,以获得它们之间的差异秒数。 然后,您可能想要创建一个timedelta,这样您就可以轻松地使用它来操纵datetime(例如,您可以将时间值与日期时间相加或相减)。

datetime.timedelta( seconds= n_seconds )


如果您的时间戳是当地时间,请不要直接减去它们,因为您可能会得到可能不正确的结果。

相反,您应首先使用datetime.fromtimestampattach 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问题的答案

TLDR

使用引用in the documentation

fromtimestamp
  

返回与POSIX时间戳对应的本地日期

您有POSIX / UNIX / EPOCH时间戳

这是一个示例(由python生成)

import datetime as dt
epoch = int(dt.datetime.utcnow().timestamp())  # example output: 1520020585

将时间戳转换为datetime对象

给定时间戳(例如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)