[英]Convert epoch timestamp to datetime.datetime object
我想将纪元时间戳(例如,et = 1351036517.179364)转换为 datetime.datetime 对象。 到目前为止,我已经使用了 time.ctime(et) 它给了我一串类似“Fri Oct 5 22:20:33 2012”的字符串。
最终,我需要 datetime 对象来计算两个数据点之间的时间差,另一个数据点也是一个 datetime 对象。
谢谢!
值得记住的是时间戳没有关联的时区信息。 Unix 时间无疑是 UTC,但在Unix 风格的时间戳中存储本地时间并不罕见。 您必须对照已知参考进行检查才能确定。
如果您的时间戳已经在 UTC (Unix time) 中,您可以使用 Marc B 的建议直接减去两个 unix 时间戳,以获得它们之间差异的秒数。 然后您可能想要创建一个timedelta ,这将允许您使用它轻松操作datetime
s(例如,您可以将 timedelta 与日期时间相加或减去)。
datetime.timedelta( seconds= n_seconds )
如果您的时间戳在本地时间,请不要直接减去它们,因为您可能会得到不正确的结果。
相反,您应该首先使用datetime.fromtimestamp ,将时区附加到每个 datetime ,然后再减去它们以获得 timedelta。
要将timedelta
转换回秒数,有timedelta.total_seconds ,假设您使用的是 python 2.7 。 如果您有较早的版本,则必须手动进行计算,或pip install datetime
要将 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 对象。
如果原始datetime
对象表示具有不同 UTC 偏移量的本地时间,则您无法直接比较它们,否则您可能会得到错误的结果。 您需要时区感知日期时间对象,或者您应该先将日期时间对象转换为 UTC。 看
使用fromtimestamp
作为引用文档中
返回与 POSIX 时间戳对应的本地日期 [...如果提供了 tz...] 时间戳将转换为 [提供] tz 的时区。
这是由 python 生成的此类时间戳的示例(感谢 @jfs 和Paul Ganssle更新)
from datetime import datetime, timezone
epoch = datetime.now(tz=timezone.utc).timestamp() # example: 1520020585.536527
注意:并非所有纪元都是相同的,使用time.time()
将给date.timestamp()
依赖于平台的纪元以来经过的秒数,其中date.timestamp()
为您提供其声称的 POSIX 时间戳,请参阅下面的注意事项
注意:我特别避免将.timestamp()
的输出称为“符合 POSIX”的时间戳。 如果您的应用程序依赖于该级别的准确性,那么您可能需要使用.timestamp()
以外的其他.timestamp()
注意:使用datetime.now
因为它可能会提供更高的精度
注意:我们可以省略上面的tz
参数,但是使用时区感知日期是一个好习惯,因为 python 3 在处理原始日期时可能会做出错误的假设(或者不会在我们认为会的地方抛出错误)
给定时间戳(例如1520020585.536527
),我们可以使用fromtimestamp
将其转换为 datetime tz 感知对象, fromtimestamp
所示:
from datetime import datetime, timezone
ts = 1520020585.536527 # remember me? I'm the epoch example output from above
utc_date = datetime.fromtimestamp(ts, tz=timezone.utc) # outputs: datetime date object
注意: fromtimestamp
需要一个“POSIX”时间戳,我们在这里提供的tz
只是为了避免幼稚的日期时间对象。 fromtimestamp
将为我们提供的时区执行任何需要的转换,但是哪个时区比 UTC 更好,对吗?
注意:尽管 python 文献将fromtimestamp()
的输入明确引用为“POSIX”时间戳,但它并没有明确将输入引用为“POSIX 兼容”,因此我们只能从其他部分推断“POSIX”时间戳是什么它的文献,比如当它把 POSIX 输出称为“由 time.time() 返回”时
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.