Python zoneinfo: корректно работать с часовыми поясами
Для календарных часовых поясов используйте zoneinfo.ZoneInfo, а не фиксированный UTC offset. Библиотека учитывает переходы летнего времени и изменения правил региона, заданные базой tzdata.
Рабочий пример
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 хранит эти правила.