pytz 和 datetime 奇怪的行为 - 可能的错误?

Posted

技术标签:

【中文标题】pytz 和 datetime 奇怪的行为 - 可能的错误?【英文标题】:pytz and datetime weird behavior - possible bug? 【发布时间】:2017-08-08 11:23:51 【问题描述】:

我得到以下输出。这是 pytz 的预期行为吗?顺便说一句,我住在美国/东部时区。为什么 EST 将 -04:56 作为时区偏移量?

import datetime
import pytz

a = datetime.datetime.now()
tz_est = pytz.timezone("US/Eastern")
a = a.replace(tzinfo=tz_est)
print("EST")
print(a)
print("\n")

b = datetime.datetime.now(pytz.timezone("US/Pacific"))
print("PST - version 1")
print(b)
print("\n")

tz_pst = pytz.timezone('US/Pacific')
c = tz_pst.normalize(a)
print("PST - version 2")
print(c)
print("\n")

美国东部标准时间 2017-03-16 22:52:27.616000-04:56

PST - 版本 1 2017-03-16 19:52:27.617000-07:00

PST - 版本 2 2017-03-16 20:48:27.616000-07:00

【问题讨论】:

Time zone field in isoformat的可能重复 【参考方案1】:
import datetime
import pytz

a = datetime.datetime.now(pytz.timezone("US/Eastern"))
b = datetime.datetime.now()

pacific = pytz.timezone("US/Pacific")
c = pacific.localize(b)
d = pacific.normalize(a)

print(c)
print(d)

【讨论】:

虽然此代码可能会回答问题,但提供有关它如何和/或为什么解决问题的额外上下文将提高​​答案的长期价值。【参考方案2】:

使用 zoneinfo 而不是 pytz 来获得预期的行为。

https://docs.python.org/3/library/zoneinfo.html

from zoneinfo import ZoneInfo

dt = datetime(2020, 10, 31, 12, tzinfo=ZoneInfo("America/Los_Angeles"))

【讨论】:

以上是关于pytz 和 datetime 奇怪的行为 - 可能的错误?的主要内容,如果未能解决你的问题,请参考以下文章

使用 pytz 进行日期时间和时区转换 - 令人兴奋的行为

使用 pytz 进行日期时间和时区转换 - 令人兴奋的行为

pytz tzname 的奇怪问题

pytz.astimezone 不考虑夏令时?

使用pytz的Datetime时区转换

在 Python2.7 中比较 Timestamp 和 datetime64 时的奇怪行为