Качество данных

Страны, которые меняли правила часовых поясов

Легко предположить, что если вы знаете часовой пояс страны, то знаете его навсегда. На практике правительства меняют политику в отношении часовых поясов чаще, чем думает большинство людей. Страна может решить отказаться от летнего времени после десятилетий его использования. Другая может сдвинуть стандартное смещение на час, чтобы приблизиться к крупному торговому партнёру. Большая страна может перекроить внутреннюю границу между двумя своими поясами при изменении регионального управления. Ни одна из этих категорий не является гипотетической. Подобные изменения довольно регулярно происходят где-нибудь в мире, даже если в отдельной стране между ними могут проходить годы или десятилетия.

Именно эту проблему решает база данных часовых поясов IANA. Вместо того чтобы хранить одно текущее смещение для каждой страны, она отслеживает каждый именованный пояс как историю правил во времени и добавляет записи всякий раз, когда правительство объявляет об изменении. Программа, которая берёт данные из поддерживаемой, регулярно обновляемой копии этой базы, подхватывает изменения без какой-либо правки собственного кода. Программа, в которой смещения зашиты по странам, например в справочной таблице, написанной один раз в начале разработки, незаметно начнёт ошибаться при следующем изменении правил в любой из охваченных стран, и сбой никак о себе не заявит. Она просто начнёт возвращать неверное местное время для этой страны, пока кто-нибудь не заметит.

По этой же причине хранить только смещение от UTC отдельно от названия пояса рискованно для любых данных, которые будут использоваться дольше нескольких месяцев. Смещение, зафиксированное сегодня, является снимком правила, которое может измениться. Название пояса, например Pacific/Auckland или Asia/Kolkata, содержит ссылку на поддерживаемый набор правил, поэтому, пока базовая база данных актуальна, вычисления по этому названию остаются верными даже после изменения правил, и вам не нужно трогать свои данные.

Практическая рекомендация для всех, кто работает с данными о часовых поясах, проста. Храните в своей базе данных названия поясов, а не голые смещения. Обновляйте библиотеку или источник данных о часовых поясах, от которых вы зависите, с разумной регулярностью, поскольку устаревшая копия ведёт себя точно так же, как зашитая таблица, как только одна из охваченных стран меняет правила. И относитесь к определению часового пояса как к вызову, который нужно делать заново для вычислений, привязанных к реальным меняющимся датам, а не как к значению, которое можно кешировать бессрочно.

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