Timezio
Назад до блогу

Що таке база даних часових поясів IANA (і чому вона важлива)

8 хв читанняВід команди Timezio

Коли ваш ноутбук тихо переводить годинник на годину назад у недільний ранок або коли запрошення в календарі від колеги із São Paulo надходить саме в той момент, на який ви очікували, цю роботу виконує та сама невидима річ: вільно підтримуваний набір даних, який майже кожна операційна система, мова програмування та вебсервіс вважають авторитетом у питаннях цивільного часу. Це база даних часових поясів IANA — її також називають базою tz, tzdata або історично базою Olson на честь Arthur David Olson, який почав її підтримувати у 1980-х роках.

Часові пояси здаються географією, але насправді це політика. Уряд може вирішити завершити перехід на літній час раніше, змінити свій стандартний зсув або взагалі пропустити цілий день — іноді попереджаючи лише за кілька тижнів. База tz — це спільний звід правил, який поглинає ці зміни, щоб питання «котра година буде в London, коли в New York 3 PM?» мало одну послідовну відповідь усюди. Ця стаття пояснює, що насправді містить ця база, як оновлення проходить шлях від урядового указу до вашого телефона і чому спокусливий короткий шлях — зберігати фіксований зсув на кшталт «UTC+1» — є помилкою, що тільки й чекає, аби спрацювати.

Чим насправді є ця база

База tz — це набір текстових файлів, що описують правила місцевого годинникового часу по всьому світу — як зараз, так і настільки давно, наскільки це дозволяють розумно простежити записи. Ви її не запускаєте; її читає програмне забезпечення. Будь-хто може її завантажити, і ці дані не мають жодних ліцензійних обмежень, що є однією з причин, чому вона опинилася всюди.

Кожен регіон ідентифікується назвою поясу у формі `Area/Location`: `America/New_York`, `Europe/London`, `Asia/Kolkata`, `Australia/Lord_Howe`. Локація — це зазвичай репрезентативне місто, а не країна, і це зроблено навмисно. Одна країна може охоплювати кілька наборів правил, а назви міст набагато стабільніші впродовж десятиліть, ніж кордони чи назви країн. База визначає кілька сотень таких поясів.

Для кожного поясу дані фіксують:

  • Базовий зсув від UTC — наприклад, `America/New_York` має UTC−5 узимку (EST).
  • Чинні правила переходу на літній час, зокрема точний час їхнього початку та завершення щороку.
  • Історичні переходи — кожну минулу зміну зсуву чи правила DST для цього поясу.
  • Абревіатури, що застосовувалися в кожен період, як-от EST, EDT, CET чи IST.

Саме цей історичний вимір відрізняє tzdata від простої таблиці зсувів. Вона не просто знає, що New York сьогодні має UTC−5. Вона знає, що Сполучені Штати перенесли дату початку DST на раніше, починаючи з 2007 року, і застосовує правильне правило для будь-якої дати, про яку ви запитуєте. Ось чому добре побудований конвертер може назвати вам зсув для дати в 1995 році так само впевнено, як і для наступного вівторка.

Пояси, посилання та заплутані записи «Etc»

База також визначає посилання (links) — псевдоніми, що вказують одну назву на іншу, щоб перейменування не ламали наявні системи. Коли пояс Індії остаточно отримав назву `Asia/Kolkata`, старіша назва `Asia/Calcutta` була збережена як посилання на нього. Обидві досі вказують на UTC+5:30.

Існують також пояси `Etc/` для фіксованих зсувів, зокрема `Etc/UTC` та сумнозвісно «перевернутий» `Etc/GMT+5`. Цей насправді означає UTC−5, а не UTC+5: назви `Etc/GMT±` інвертують знак за старою конвенцією POSIX. Ці пояси з фіксованим зсувом існують для вузьких технічних потреб. Для будь-якого місця, де живуть реальні люди, вам потрібен географічний пояс — адже лише географічний пояс знає про перехід на літній час і майбутні зміни правил. Наступний розділ пояснює, чому це важливо.

Чому правила часових поясів змінюються так часто

Люди припускають, що часові пояси усталені. Це не так. Базу tz оновлюють кілька разів на типовий рік, іноді частіше. Випуски версіонуються за роком і літерою — `2023a`, `2023b`, `2024a` — і кожен охоплює всі зміни правил та виправлення, що накопичилися з часу попереднього.

Зміни надходять із кількох постійних джерел:

  • Уряди коригують політику DST. Країна починає дотримуватися літнього часу, припиняє це робити або переносить дати переходу. Європейський Союз роками обговорює скасування сезонної зміни годинника, а кілька штатів США ухвалили законопроєкти, що прагнуть запровадити постійний DST і чекають на федеральне схвалення.
  • Прямі зміни зсуву. Час від часу територія повністю переходить на інший стандартний час. Класичний випадок: наприкінці 2011 року Samoa взагалі пропустила 30 грудня, перестрибнувши на інший бік Міжнародної лінії зміни дат, щоб узгодити свій робочий тиждень з Australia та New Zealand замість Західного узбережжя США.
  • Оголошення з коротким попередженням. Це найскладніша частина. Уряд іноді оголошує про зміну за тижні — або дні — до її набрання чинності. Тоді супровідники бази та постачальники нижчого рівня поспішають випустити й розповсюдити оновлення до настання тієї дати.
  • Історичні виправлення. Дослідники знаходять старі закони, газетні архіви чи залізничні розклади, які уточнюють, *яким* був зсув поясу десятиліття тому, і ці виправлення теж долучаються.

Прямий висновок: правило для певного місця відоме лише до наступного урядового рішення. Будь-яка система, що припускає, ніби сьогоднішні правила незмінні, рано чи пізно помилиться.

Як оновлення доходить до вашого телефона

Базу підтримує спільнота волонтерів, які координуються через публічний список розсилки, а IANA (Internet Assigned Numbers Authority) слугує офіційним домом і точкою розповсюдження. Зміна зазвичай проходить такий шлях:

1. Хтось повідомляє про неї у списку розсилки tz, зазвичай посилаючись на урядовий вісник, офіційне оголошення чи першоджерельне дослідження. 2. Супровідники перевіряють і обговорюють її, а потім вносять правку у відповідний файл даних. 3. IANA публікує новий випуск із тегом версії, як-от `2024a`. 4. Споживачі нижчого рівня вбирають його — дистрибутиви Linux, macOS, середовища виконання мов та основні платформи. (Windows зберігає власний формат часових поясів і зіставляє його з назвами IANA.) 5. Ваш пристрій підхоплює його через оновлення ОС, оновлення застосунку або, на серверах, через пакет на кшталт `tzdata`.

Цей конвеєр також є місцем, де народжуються реальні баги. База може бути ідеально актуальною, тоді як конкретний пристрій — ні. Ноутбук, який пропустив оновлення, продовжує застосовувати старе правило, і годинник показує неправильний час у день переходу. Розрив між «правило змінилося» та «кожен пристрій про це знає» — це найбільше окреме джерело багів із часовими поясами, з яким ви реально зіткнетеся.

Чому жорстко закодовані зсуви застарівають

Ось та помилка, заради запобігання якій існує вся система. Розробник вирішує зберігати часовий пояс користувача як просте число — `+1` — бо це виглядає ефективно. Це зламано одразу в трьох аспектах.

  • Воно ігнорує DST. `Europe/Paris` має UTC+1 узимку та UTC+2 улітку. Збережене `+1` правильне лише частину року, і кожної весни та осені обчислення зсуваються на годину.
  • Воно не може представити сам перехід. Уранці, коли годинник переводять уперед, одна місцева година не існує; уранці, коли його переводять назад, одна місцева година трапляється двічі. Голий зсув не має способу сказати «02:30 трапилося двічі». Іменований пояс, застосований через правильну логіку дат, може це зробити.
  • Воно заморожує правило, яке зміниться. Якщо регіон скасує DST наступного року, база tz випустить оновлення, і кожна сумісна система адаптується автоматично. Жорстко закодоване `+1` назавжди продовжуватиме застосовувати торішню політику, мовчки видаючи неправильний час.

Розібраний приклад із перевіреними зсувами

Заплануйте регулярний дзвінок на кожен понеділок о 09:00 у Berlin, до якого долучається хтось у Chicago. Поспостерігайте, як розрив рухається протягом року:

  • Середина січня: Berlin на CET (UTC+1), Chicago на CST (UTC−6). Розрив становить 7 годин, тож дзвінок припадає на 02:00 у Chicago.
  • Середина липня: обидва перейшли на літній час — Berlin CEST (UTC+2), Chicago CDT (UTC−5). Усе ще 7 годин, тож усе ще 02:00 у Chicago.
  • Середина березня: дві країни переходять *не* в один день. У 2025 році США перевели годинник уперед 9 березня, а ЄС — лише 30 березня. Протягом тих трьох тижнів Chicago вже був на CDT (UTC−5), тоді як Berlin усе ще був на CET (UTC+1) — розрив лише в 6 годин, через що дзвінок припадав на 03:00 у Chicago.

Інструмент, який зберіг би «Berlin = +1, Chicago = −6», помилявся б на годину в липні *і* протягом березневих тижнів накладання. Лише система, яка розв'язує іменовані пояси відносно *конкретної дати*, правильно визначає кожен тиждень. Саме так працюють планувальник зустрічей і конвертер Timezio: вони запитують, яке місце ви маєте на увазі, а потім застосовують актуальні правила для відповідної дати, а не заморожене число.

Практичний контрольний список

Вам ніколи не потрібно відкривати файл tzdata, щоб скористатися перевагами його роботи. П'ять звичок переносять цю цінність у повсякденне використання:

  • Зберігайте та діліться місцями, а не зсувами. «Я в `America/Los_Angeles`» переживає DST і зміни політики. «Я на UTC−8» — ні.
  • Тримайте свої системи оновленими. Найпоширеніша причина, чому годинник показує неправильний час у вихідні переходу, — це пристрій, який пропустив останній випуск `tzdata`. Оновлення ОС та застосунків — це те, як виправлення доходить до вас.
  • Не довіряйте жодному інструменту, що показує єдиний фіксований зсув для міста. Якщо він не враховує дату, він не може враховувати DST.
  • Перевіряйте транскордонні події довкола вихідних зі зміною годинника та після будь-якого урядового оголошення. Саме тоді розрив між правилом і оновленням кусає найболючіше.
  • Сприймайте кожну відповідь як тимчасову. Сьогоднішнє правильне перетворення правильне лише до наступного указу.

База даних часових поясів IANA — це один із найтихіших елементів спільної інфраструктури в інтернеті: підтримуваний волонтерами набір текстових файлів, на який цифровий світ спирається у питаннях цивільного часу. Вона працює, бо ставиться до часових поясів як до того, чим вони насправді є: рухомої цілі, сформованої політикою, а не фіксованої сітки, накресленої на мапі. Кожне точне перетворення, на яке ви покладаєтеся, зокрема й перетворення Timezio, залежить від того, що хтось, десь, записав найновіше правило та випустив його до того, як годинники змінилися.

Назад до блогу