我试图验证我对python时间(和夏令时)处理的理解是否正确。我写了下面的代码:
import datetime
import zoneinfo
def test_switchover() -> None:
zone = zoneinfo.ZoneInfo('Europe/Berlin')
expected = datetime.datetime(year=2022, month=10, day=30, hour=2, minute=30, fold=1, tzinfo=zone)
base = datetime.datetime(year=2022, month=10, day=30, hour=2, minute=30, fold=0, tzinfo=zone)
got = base + datetime.timedelta(hours=1)
assert expected == got
(注意expected
有fold=1,这标志着它是第二次出现2:30)
德国夏令时于2022-10-30结束。时钟从03:00:00 CET调回02:00:00 CET
我代码中的所有datetime对象都是时区感知的。因此,02:30:00后1小时应再次为02:30:00。但是这个断言失败了!
> assert expected == got
E AssertionError: assert datetime.datetime(2022, 10, 30, 2, 30, fold=1, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin')) == datetime.datetime(2022, 10, 30, 3, 30, tzinfo=zoneinfo.ZoneInfo(key='Europe/Berlin'))
tests/test_python_dst_switchover.py:12: AssertionError
为什么?
(python 3.10)
我想更改在午夜操作,不是吗?
事实上,在法国,我认为它在午夜改变,我认为在大多数欧洲应该是一样的,因此Python可能认为这是整个欧洲的情况。