Python считает эти даты равными. Хотя между ними целый час

Python считает эти даты равными. Хотя между ними целый час

В ночь перевода часов время 02:30 наступает дважды:

from datetime import datetime, UTC

from zoneinfo import ZoneInfo

tz = ZoneInfo("Europe/Berlin")

a = datetime(2026, 10, 25, 2, 30, tzinfo=tz, fold=0)

b = datetime(2026, 10, 25, 2, 30, tzinfo=tz, fold=1)

print(a)

2026-10-25 02:30:00+02:00

print(b)

2026-10-25 02:30:00+01:00

Это разные моменты:

a = 00:30 UTC

b = 01:30 UTC

Но Python выдаёт:

a == b # True

b - a # 0:00:00

len({a, b}) # 1

Причина: если у двух datetime один объект tzinfo, при сравнении Python игнорирует смещение и fold.

Из-за этого дедупликация может принять два платежа, заказа или события за одно.

Для сравнения реальных моментов переводите время в UTC:

a_utc = a.astimezone(UTC)

b_utc = b.astimezone(UTC)

a_utc == b_utc

False

(b_utc - a_utc).total_seconds()

3600.0

Используйте astimezone(UTC). Метод replace(tzinfo=UTC) только заменяет метку и не пересчитывает время.

https://docs.python.org/3/library/datetime.html

https://peps.python.org/pep-0495/

1