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
?在这两种情况下,它都比较相同的日期时间,仅调整到不同的区域。
两个日期时间对象 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 值不同。