将epoch时间戳转换为datetime.datetime obj

2024-05-16 15:29:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我想将纪元时间戳(例如,et=1351036517.179364)转换为datetime.datetime对象。到目前为止,我用的是时间。ctime(et)给了我一个类似“2012年10月5日星期五22:20:33”的字符串。

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

谢谢!


Tags: 数据对象字符串datetime时间et时间差ctime
3条回答

这是给那些被标题画在这里,但却得到了操作问题的答案的用户使用的

TLDR公司

使用fromtimestamp作为引用in the documentation

Return the local date corresponding to the POSIX timestamp

您有一个POSIX/UNIX/EPOCH时间戳

下面是一个示例(由python生成)

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

将时间戳转换为日期时间对象

给定时间戳(例如1520020585),我们使用fromtimestamp将其转换回datetime tz naive对象,如下所示:

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)

要将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对象。


I need the datetime object to compute time difference between two datapoints, the other datapoint is a datetime object as well.

如果naivedatetime对象表示具有不同UTC偏移量的本地时间,则不能直接进行比较,否则可能会得到错误的结果。您需要知道时区的datetime对象,或者应该先将datetime对象转换为UTC。见

值得记住的是,时间戳没有相关的时区信息。 Unix time是明确的UTC,但将本地时间存储在Unix风格的时间戳中并不罕见。你必须对照已知的参考资料来确定。


如果您的时间戳已经是UTC(Unix时间),您可以使用Marc B的建议,直接减去两个Unix时间戳,以给出它们之间的差异秒数。 然后,您可能需要创建一个timedelta,这将允许您轻松地使用它操作datetime(例如,您可以对datetime的时间增量进行求和或减去时间增量)。

datetime.timedelta( seconds= n_seconds )


如果时间戳在本地时间内,不要直接减去它们,否则可能会得到错误的结果。

相反,您应该先使用datetime.fromtimestampattach a timezone to each datetime,然后再减去它们得到时间增量。

要从timedelta转换回秒数,假设您使用的是python 2.7,那么timedelta.total_seconds。如果你有一个更早的版本,你必须手工计算,或者pip install datetime

相关问题 更多 >