PYTZ 总是提前 7 小时

PYTZ always 7 hours ahead

所以我试图在 python 中制作一个不和谐的机器人并制作一个命令来显示我选择的所有时区,但问题是所有这些时区都提前了 7-8 小时左右正常。

import datetime
from pytz import timezone

localFormat = "%Y-%m-%d %H:%M:%S, %Z%z"

UTC=datetime.datetime.utcnow()

timezonelist = ["US/Eastern", "US/Central", "US/Mountain", "US/Pacific", "Etc/UTC", "Europe/Berlin", "Australia/North", "Australia/South", "Australia/West"]

for tz in timezonelist:
    localDatetime = UTC.astimezone(timezone(tz))
    x = localDatetime.strftime(localFormat)
    print(tz + " " + x)

比如Etc/UTC应该输出22:56:25的时候输出05:56:25,其他时区照这个例子,EST应该[=22=的时候输出00:56:25 ],或 MST(我所在的位置),22:56:25 而不是 15:56:25。但是,datetime.utcnow() returns 正确的时间。

我做了一些研究,它说 PYTZ 使用 LMT,但由于所有的都向前移动了一定数量,我认为这与此无关。

utcnow() 给你一个天真的日期时间对象——它不知道它在 UTC 中,尽管数字 show UTC。如果您转换到另一个时区,Python 将假设所有原始日期时间对象都是 本地时间 。您的本地时间 (MST) 是 UTC-7,这就是您延迟 7 小时的原因。

utcnow 的行为令人困惑,并可能导致意外结果 - Stop using utcnow and utcfromtimestamp。相反,使用 now() 并明确设置 tz:

UTC = datetime.datetime.now(timezone('UTC'))