在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中的任何东西来获取时间戳。您知道检索我的原始时间戳的方法吗?
答案 0 :(得分: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