Python:UTC 与本地时间戳

Python: UTC vs local timestamp

为什么以下 return 不同的时间戳?是因为 datetime.utcnow() 没有时区吗?在我看来 tzinfo=utc 是冗余的,所以我可能不明白什么是 utcnow() 以及 UTC 号码怎么可能没有一个时区。我想是有原因的,请赐教:)

from datetime import datetime
from pytz import utc

local_seconds = int(datetime.utcnow().timestamp())
utc_seconds = int(datetime.utcnow().replace(tzinfo=utc).timestamp())

我的目标是获取 UTC 时间戳。看起来像第一种方法 returns 本地时间戳(如果我错了请纠正我)

编辑: 我住的地方时区是 GMT-5。事实上:

(utc_seconds-local_seconds)/3600 # is equal to -5.0

以下两个语句总是 return 不同的结果。

local_seconds = int(datetime.utcnow().timestamp())
utc_seconds = int(datetime.utcnow().replace(tzinfo=utc).timestamp())

输出:

1585584790
1585604590

你问为什么?因为,当第一个语句执行时,执行过程中花费了一些时间,现在第二个语句会为您获取不同的结果,因为第二个语句的 datetime.utcnow() 已更改。

我的假设是,您想看看这两个操作是否会给出相同的结果?他们肯定会给出相同的结果:

  1. 您是否向他们提供了相同的输入?
  2. 你有没有从一个公共图书馆执行过类似的操作。

解决 1. 像这样更改代码。

same_time_input = datetime.utcnow()

local_seconds = int(same_time_input.timestamp())
utc_seconds = int(same_time_input.replace(tzinfo=utc).timestamp())

输出仍然不一样,因为您使用的是外部库,并且替换功能没有按您预期的那样工作。

如果您从 same_time_input 打印出 tzinfo,您会发现它没有任何时区信息,其原因可在此处阅读。 --> Why does datetime.datetime.utcnow() not contain timezone information?

print(same_time_input.tzinfo)

现在,您正尝试使用内部实现不同的单独库为其提供时区信息,从而导致 slightly off 结果。