为什么这两个日期时间不相等?

问题描述 投票:0回答:1
from datetime import datetime, timedelta
from zoneinfo import ZoneInfo

chi = ZoneInfo("America/Chicago")
nyc = ZoneInfo("America/New_York")
dt1 = datetime(2024, 3, 10, 3, 30, tzinfo=chi)
dt2 = datetime(2024, 3, 10, 2, 30, tzinfo=chi)
print(dt1 == dt1.astimezone(nyc))
print(dt2 == dt2.astimezone(nyc))

实际结果:

True
False

预期结果:

True
True

为什么在其中一种情况下会返回

False
?在这两种情况下,它都比较相同的日期时间,仅调整到不同的区域。

python datetime
1个回答
0
投票

两个日期时间对象 dt1 和 dt2 在转换为纽约时区 (nyc) 后不被视为等于各自的对应对象,原因是夏令时 (DST) 影响不同时区之间的偏移量。

创建 dt1 和 dt2 时,您指定的是芝加哥时区 (chi)。然后,您使用 astimezone() 方法将这些日期时间对象转换为纽约时区 (nyc)。

但是,2024 年 3 月 10 日,美国开始实行夏令时。这意味着芝加哥和纽约时区之间的偏移量发生变化,导致日期时间对象不同。

举例说明:

dt1 represents 3:30 AM on March 10, 2024, in the Chicago timezone.
dt2 represents 2:30 AM on March 10, 2024, in the Chicago timezone.

将这些日期时间对象转换为纽约时区 (nyc) 时,转换会根据当地时间 2024 年 3 月 10 日凌晨 2:00 发生的 DST 偏移量更改来调整时间。

要验证这一点,您可以打印转换后的日期时间对象:

print(dt1.astimezone(nyc))
print(dt2.astimezone(nyc))

您会注意到,由于 DST 转换,转换后的日期时间对象与原始 dt1 和 dt2 值不同。

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