【问题标题】:PYTZ always 7 hours aheadPYTZ 总是提前 7 小时
【发布时间】:2021-03-16 01:18:43
【问题描述】:

所以我试图在 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 在应为 17:56:25 时输出 00:56:25,或 MST (我在哪里),22:56:25 而不是 15:56:25。但是,datetime.utcnow() 会返回正确的时间。

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

【问题讨论】:

  • 顺便说一句。 LMT(本地平均时间)是 pytz 时区对象的状态您将其附加到具有astimezonelocalize 的日期时间对象。如果你使用 datetime 的 replace 方法,它只会保持 LMT - 如果你使用 pytz,你不应该使用它。使用 dateutil 或 zoneinfo 时区对象,您不必担心这个问题。

标签: python python-3.x datetime discord pytz


【解决方案1】:

utcnow() 为您提供了一个简单的日期时间对象 - 尽管数字 显示 UTC,但它并不知道它是 UTC。如果您转换到另一个时区,Python 将假定所有天真的日期时间对象都是本地时间。您的当地时间 (MST) 是 UTC-7,这就是您要提前 7 小时休息的原因。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-11-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-12-01
    • 1970-01-01
    • 2011-04-05
    相关资源
    最近更新 更多