夏令时结束



我试图验证我对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可能认为这是整个欧洲的情况。

最新更新