Python:UTC与本地时间戳记

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

为什么以下内容返回不同的时间戳?是否因为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时间戳。看起来第一种方法返回本地时间戳记(如果我输入错了,请纠正我)

python timestamp timezone local utc
1个回答
0
投票

以下两个语句将始终返回不同的结果。

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结果。

© www.soinside.com 2019 - 2024. All rights reserved.