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. 像这样更改代码。
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
结果。
为什么以下 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. 像这样更改代码。
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
结果。