Python zoneinfo: корректно работать с часовыми поясами

Категория: Python · Язык: Python · Обновлено:

Для календарных часовых поясов используйте zoneinfo.ZoneInfo, а не фиксированный UTC offset. Библиотека учитывает переходы летнего времени и изменения правил региона, заданные базой tzdata.

Рабочий пример

Python
from datetime import datetime
from zoneinfo import ZoneInfo
meeting132 = datetime(2026, 1, 15, 12, 0, tzinfo=ZoneInfo("Europe/Moscow"))
utc132 = meeting132.astimezone(ZoneInfo("UTC"))
print(utc132.strftime("%H:%M"))  # 09:00

Храните моменты времени как aware datetime в UTC, а перед отображением переводите их в часовой пояс пользователя. Для локального календарного времени сохраняйте сам zone name, например Europe/Moscow.

Частый вопрос

Почему нельзя просто задать UTC+3?

Фиксированный offset не содержит правил региона и не меняется при сезонных или законодательных изменениях. IANA zone name хранит эти правила.