Время в программировании делится на абсолютное (инстанты и длительности от эпохи) и гражданское (человеческие представления через календари и часы).
Абсолютное время измеряется секундами от опорного момента (эпохи), что позволяет однозначно вычислять порядок событий и интервалы.
Гражданское время использует Григорианский календарь и разделяет время на годы, месяцы, дни и часы, но при этом периоды (например, месяц) имеют неоднозначную длину.
SI-секунда определяется через колебания атома цезия, а UTC синхронизирует атомные часы и добавляет високосные секунды для учета замедления вращения Земли.
Високосные секунды появляются нерегулярно и влияют на точный расчет длительностей между гражданскими датами.
Часовые пояса трансформируют UTC в местное время, устанавливая смещение, которое может меняться из-за перехода на летнее время или политических решений.
При переводе местного времени в абсолютное значение некоторые гражданские даты могут быть неоднозначными (повторяются) или несуществующими (пропускаются).
Для корректной работы с часовыми поясами и историей их изменений используют базу IANA Time Zone Database, покрывающую правила с 1970 года.
При сохранении или планировании событий важно учитывать будущие изменения правил времени: простое хранение UTC не всегда гарантирует неизменность локального времени.
Рекомендуется использовать библиотеки, работающие с IANA-базой, регулярно обновлять данные и явно сохранять все параметры: исходный ввод, UTC-время и идентификатор часового пояса.
Get notified when new stories are published for "🇷🇺 Hacker News Русский"