从使用utcfromtimestamp实例化的datetime检索时间戳

问题描述 投票:2回答:1

在Python脚本中,我实例化了一个带有时间戳值的datetime。我无法检索原始时间戳。

例:

origin_timestamp = 1554840000
utc_datetime = datetime.datetime.utcfromtimestamp(origin_timestamp)
calculated_timestamp = utc_datetime.timestamp()
print("===== calculated_timestamp =====")
print(calculated_timestamp)

print("===== EQUAL TIMESTAMP =====")
print(origin_timestamp == calculated_timestamp)

在CLI中显示以下行:

===== calculated_timestamp =====
1554829200.0
===== EQUAL TIMESTAMP =====
False

我在documentation找不到任何东西来获取时间戳。你知道一种检索我的原始时间戳的方法吗?

python python-3.x timestamp python-3.6
1个回答
1
投票

问题是天真的datetime实例被假定为代表当地时间,这会影响timestamp()方法的作用。您可以通过调用以下方法来设置时区感知的utc datetime实例来解决这个问题:

utc_datetime.replace(tzinfo=datetime.timezone.utc)

这是一个完整的例子:

import datetime


origin_timestamp = 1554840000

print("===== origin_timestamp =====")
print(origin_timestamp)

utc_datetime = datetime.datetime.utcfromtimestamp(origin_timestamp)
print("===== utc_datetime =====")
print(utc_datetime)

# Add a timezone to utc_datetime
utc_datetime2 = utc_datetime.replace(tzinfo=datetime.timezone.utc)
print("===== utc_datetime2 =====")
print(utc_datetime2)

# Use it.
calculated_timestamp = utc_datetime2.timestamp()
print("===== calculated_timestamp =====")
print(calculated_timestamp)

print("===== difference =====")
print(calculated_timestamp - origin_timestamp)

print("===== EQUAL TIMESTAMP =====")
print(origin_timestamp == calculated_timestamp)

输出:

===== origin_timestamp =====
1554840000
===== utc_datetime =====
2019-04-09 20:00:00
===== utc_datetime2 =====
2019-04-09 20:00:00+00:00
===== calculated_timestamp =====
1554840000.0
===== difference =====
0.0
===== EQUAL TIMESTAMP =====
True

仅供参考:帮助我了解正在发生的事情的主要线索是打印两个时间戳之间的差异,即25200秒 - 恰好是7.0小时 - 这似乎有点像UTC的时区偏移(无论如何在美国) )。 datatime.timestamp()的文档证实了这就是实例方法的作用。

这就是我的意思:

>>> m = 25200 / 60  # difference in minutes
>>> m
420.0
>>> h = m / 60  # in hours
>>> h
7.0
© www.soinside.com 2019 - 2024. All rights reserved.