gpt4 book ai didi

python - 使用 Python 比较 UTC 时间和东部时间

转载 作者:太空狗 更新时间:2023-10-30 00:41:35 27 4
gpt4 key购买 nike

我正在尝试使用 Python datetime 模块比较两次,但我似乎无法在 UTC 中创建可识别时区的 time 对象。

>>> import pytz, datetime
>>> UTC_TZ = pytz.utc
>>> EASTERN_TZ = pytz.timezone('America/New_York')
>>> d1 = datetime.time(10, tzinfo = UTC_TZ)
>>> d1
datetime.time(10, 0, tzinfo=<UTC>)
>>> d2 = datetime.time(10, tzinfo = EASTERN_TZ)
>>> d2
datetime.time(10, 0, tzinfo=<DstTzInfo 'America/New_York' EST-1 day, 19:00:00 STD>)
>>> d1 < d2
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: can't compare offset-naive and offset-aware times

这是一个错误吗?我需要使用特殊的 UTC 时区吗?怎么回事?

最佳答案

这一切都归功于 wberry,但为了得到一个简洁的答案,我将在此处进行总结。

根据日期时间文档,在比较两个 datetime.time 对象时:“如果两个比较对象都知道并且具有不同的 tzinfo 属性,则首先通过减去它们的 UTC 偏移量(从 self.utcoffset() 获得)来调整比较对象”

在您提供的示例中,比较会抛出 TypeError,因为 EASTERN_TZ.utcoffset() 返回 None。 utcoffset 为 None,因为美国东部遵守夏令时,因此与 UTC 的时间偏移取决于 datetime.time 中不可用的日期。

您应该使用 datetime.datetime 对象进行跨时区比较:

>>> import pytz, datetime
>>> UTC_TZ = pytz.utc
>>> EASTERN_TZ = pytz.timezone('America/New_York')
>>> d1 = datetime.datetime(2012, 1, 1, 10, 0, tzinfo=UTC_TZ)
>>> d2 = datetime.datetime(2012, 1, 1, 10, 0, tzinfo=EASTERN_TZ)
>>> d1 < d2
True

关于python - 使用 Python 比较 UTC 时间和东部时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10524165/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com