Все статьи
Интересности5 августа 2026 г.4 мин

Летнее время: почему перевод часов ломает программы

Неоднозначные и несуществующие локальные часы в дни смены смещения. Практические шаги, частые ошибки и короткий чек-лист.

Д
Даниил
CEO

Летнее время: почему перевод часов ломает программы

Неоднозначные и несуществующие локальные часы в дни смены смещения.

Короткий ответ

При переходе на летнее время часть локальных значений либо не существует, либо встречается дважды. Поэтому запись «02:30» без даты, зоны и правила смещения может быть неоднозначной.

Пропущенный час

При переводе вперёд часы перескакивают через диапазон локального времени. Событие внутри него нужно перенести, отклонить или интерпретировать по заранее выбранному правилу.

Повторяющийся час

При переводе назад одинаковое локальное время относится к двум разным моментам с разными смещениями UTC. Без дополнительного признака система не знает, какой из них имелся в виду.

Будущие события сложнее прошлых

Правила зон меняются решениями властей. Для будущего расписания храните исходное локальное время и идентификатор зоны, обновляйте tzdata и пересчитывайте моменты после изменения правил.

Что учитывать на практике

  • Храните события как момент плюс зона.
  • Обрабатывайте повторяющийся локальный час.
  • Проверяйте пропущенный час весной.
  • Пересчитывайте будущие события при новых правилах.

История времени полезна разработчику именно потому, что привычные часы и календарь состоят из соглашений, исключений и меняющихся правил. Для production-кода используйте поддерживаемые библиотеки и проверяйте граничные даты отдельно.

Источники и дополнительное чтение

Итог

При переходе на летнее время часть локальных значений либо не существует, либо встречается дважды. Поэтому запись «02:30» без даты, зоны и правила смещения может быть неоднозначной.