Звичайний годинник в нашому смартфоні завжди показує точний місцевий час, в якому б місті чи країні ми не опинилися. Це настільки звично та зручно, що здається в цьому немає жодних труднощів в програмуванні. Але насправді людство так погралося з часом на Землі, що це легко «зламає» мозок програмісту. Ось добірка особливостей часових зон, з якими доведеться впоратися, щоб створити автоматичний годинник.
Неправда 1: Відхилення від UTC йде від -12 до +12
Сьогодні наші гаджети відраховують час відповідно до Всесвітнього координованого часу (Coordinated Universal Time, UTC). Його точка відліку проходить через «нульовий меридіан», який, к відомо, проходить через обсерваторію Грінвіч, що знаходиться в Лондоні.
Оскільки Земля кругла, а доба має 24 години, може здатися, що на планеті всього 24 часових зони UTC – 12 зон на схід та 12 зон на захід. Але це не так.
Виявляється, відхилення від UTC охоплюють від -12 до +14. Так, +14. Це дає вам 27 годин, на які можна змінити UTC (не забудьте про нульове відхилення).
Як це працює? UTC-12 має такий самий час, як UTC+12, але на один день відстає. Те ж саме стосується UTC-11 і UTC+13.
Чому такий божевільний діапазон? Це стало наслідком рішення жителів островів Тихого океану, які вибрати певну сторону міжнародної лінії зміни дати.
Це призводить до дуже нерівної міжнародної лінії зміни дати.
Неправда 2: кожне відхилення від UTC відповідає рівно одному часовому поясу
Ось 10 різних часових поясів, які всі мають UTC+5:
- Aqtobe Time – Час Актобе
- Mawson Time – Час Моусон
- Maldives Time – Мальдівський час
- Oral Time – Час Орала
- Pakistan Standard Time – Пакистанський стандартний час
- French Southern and Antarctic Time – Французький час Південної Франції та Антарктиди
- Tajikistan Time – Таджицький час
- Turkmenistan Time – Туркменський час
- Uzbekistan Time – Узбекистанський час
- Yekaterinburg Time – Час Єкатеринбурга
Ви, можливо, питаєтеся: якщо всі вони мають одне й те ж відхилення від UTC, чому всі ці регіони не можуть використовувати один і той же часовий пояс? Можливо, пакистанці не були зацікавлені в тому, щоб бути в одному часі з Єкатеринбургом.
Неправда 3: В світі більше країн, ніж часових поясів
- Багато країн хочуть мати свій власний часовий пояс
- Деякі країни розбиваються на кілька часових поясів (наприклад, східний і західний час)
- Військовий час використовує лише 25 часових поясів, по одному на кожну годину від UTC-12 до UTC+12
- Літній час. Більше про це нижче
Всього, 195 країн світу використовують 244 часових пояси.
Неправда 4: У кожного часового поясу є рівно одне прийняте найменування
Чи помічали ви, що кожен часовий пояс складається тільки з англійських слів? Дуже щедро з боку, наприклад, іспаномовних чи франкомовних країн використовувати англійську мову, чи не так?
Але все ж є місцеві назви. Eastern Standard Time, Tiempo del Este та Heure Normale de l’Est – це різні назви для того самого часового поясу.
Неправда 5: Часові пояси завжди відхиляються від UTC на цілу кількість годин
Індійський стандартний час відхиляється на п’ять годин та пів години від UTC. Є й інші приклади, коли в новому часовому поясі доводиться налаштовувати не лише години, а й хвилини.
Неправда 6: Добре, часові пояси завжди відхиляються від UTC на цілу кількість годин та півгодини
Непал любить бути з 45-хвилинним відхиленням UTC.
Чому ці додаткові 15 хвилин так важливі для них? Тому що вони хочуть, щоб їхня гора мала сонце прямо над собою в обід.
Але це заставляє задуматися: що станеться, якщо гора коли-небудь змінить своє положення?
Неправда 7: Країна залишається в тому самому відхиленні від UTC протягом усього року
Не забувайте про час збереження денного світла! Або, як кажуть у Європі, “літній час”.
Країни, які застосовують літній час, змінюють своє відхилення від UTC двічі на рік.
Неправда 8: Існує стандартний формат для визначення часових поясів
Є традиційні назви часових поясів, які ми звикли бачити. Наприклад: Тихоокеанський стандартний час. Але це не є офіційний термін для цих назв, вони просто нестандартизовані.
Ключі зон IANA – це найбільш офіційний стандарт, який можна отримати щодо часових поясів. Це зовсім не офіційно, але це щось, навколо чого об’єдналася спільнота програмістів.
Це підтримувана вручну база даних, яка містить всі відомі дані про часові пояси, що представляють всю історію місцевого часу для місць по всьому світу. Вона не дає жодній зоні назви, віддаючи перевагу назві найважливішого міста в ній.
Називання часової зони за найвідомішим містом в ній призводить до зрозумілого, але поганого рішення. Повні назви часових поясів супроводжуються складнощами назв, про які ми говорили вище. Якщо цього вам було мало, є ще й політичні наслідки визнання деяких часових поясів, таких як Ізраїльський стандартний час.
Деякі розробники обрали безпечний шлях і ідентифікували часові пояси лише за назвою важливого міста в них, не витрачаючи часу на картографування до спільного імені. Ось чому вибір часового поясу в Ubuntu заставляє вас вибрати “Нью-Йорк”, а не Eastern Standard Time.
Ще є варіант забути про часові пояси, використовуючи відхилення від UTC. Міжнародний стандарт W3 відмовився від ідеї часових поясів і оголосив, що інженери повинні зберігати тільки відхилення від UTC для мітки часу.
Цікавий факт: багато програмних інтерфейсів (API) для отримання відхилення UTC регіону хочуть тільки UTC-час та широту/довготу. Це дозволяє їм чітко визначити будь-який момент із непомилковістю і не турбуватися про літній час. Можна розглядати це як четвертий стандарт.
Неправда 9: Літній час починається у тому ж самому часі кожен рік
Кожна країна обирає час початку свого власного літнього часу
Неправда 10: Часовий пояс країни ніколи не змінюється
Майже щороку яка-небудь країна приймає закон, щоб змінити свій часовий пояс.
У особливо пам’ятному прикладі кілька років тому острови Самоа хотіли бути на іншому боці міжнародної лінії зміни дати, щоб мати ті самі вихідні, що й їх австралійські торгові партнери. Так що в північ на початку 29 грудня вони змінили своє відхилення від UTC з -11 на +13 UTC, пропустивши 30 грудня і перейшовши прямо на 31 грудня.
З позитивного боку, тепер самоанці можуть святкувати новий рік на західному острові, а потім перепливти на Американські острови Самоа, які знаходяться по інший бік лінії зміни дат, на другу новорічну вечірку наступної ночі.
Неправда 11: Країна залишається в тому самому часовому поясі під час літнього часу
Цікава річ про літній час: він насправді не змінює відхилення від UTC часового поясу. Замість цього країни з літнім часом переходять на інший часовий пояс, з іншою назвою.
Наприклад: Техас переходить з Центрального стандартного часу на Центральний літній час. Чилі переходить з Чилійського стандартного часу на Чилійський літній час
Неправда 12: Літній час починається приблизно в березні і закінчується приблизно в жовтні
Південна півкуля має своє літо в іншій половині року. Змінюється шаблон.
Іноді літній час починається і закінчується точно один раз на рік: коли починається місяць Рамадан. Деякі мусульманські країни виходять з літнього часу, а потім знову вступають в літній час після закінчення Рамадану. Це змінює час на заході сонця і час закінчення посту приходить швидше
Неправда 13: У кожного часового поясу є своя назва
Яка країна має право претендувати на “Eastern Standard Time”? Північна Америка визначила права на це ім’я, але чи ви думаєте, що ніхто не заперечував? Австралія вважала, що це звучить як гарна назва для використання, і тому навіть коли решта світу посилається на її часовий пояс як Австралійський Східний стандартний час, деякі з її власних громадян просто називають його “Eastern Standard Time”.
Неправда 14: У кожного часового поясу є власна абревіатура
Яка з цих розшифровок мається на увазі, коли хтось каже CST?
- Центральний стандартний час
- Китайський стандартний час
- Кубинський стандартний час
І пам’ятаєте, як назва часового поясу змінюється під час літнього часу? Багато людей про це не знають і продовжують використовувати неправильні абревіатури протягом місяців літнього часу. CST може бути використано для Центрального літнього часу.
Якщо для часових поясів немає стандартної назви, чи можна очікувати стандартну абревіатуру для них?
Неправда 15: Завжди існує однозначне перетворення з одного часового поясу в інший
Скажімо, треба 5 вечора за Східноамериканським стандартним часом на Пакистанський стандартний час. Який саме Східноамериканський стандартний час мається на увазі — американський чи австралійський? І чи діє літній час, чи ні?
Добре, це складно. Але впевнено, якщо ми включимо дату і точне місто, ми зможемо надійно зробити перетворення, чи не так?
А якщо дата і час — 1:30 ночі 1 листопада 2020 року, прямо коли закінчується літній час в США і годинник переводиться назад? 1:30 ночі відбувається двічі в той ранок, яке з них ми мали на увазі?
Неправда 16: Програмна бібліотека часових поясів може розпізнавати будь-який часовий пояс
Пам’ятаєте всі ці різні можливі назви та формати часових поясів? Більшість програмних бібліотек підтримують лише один.
І вони можуть бути обмежені часовими поясами, встановленими на вашому локальному комп’ютері.
Пам’ятайте, що часові пояси можуть змінюватися за бажанням місцевого уряду. Тоді бібліотеці потрібно зовнішній набір даних для оновлення її обчислень. Цей зовнішній набір даних може бути саме часовими поясами, встановленими на вашому комп’ютері.
Неправда 17: Час під час літнього часу змінюється по всій країні
У США Аризона не практикує літній час
Неправда 18: Вся держава переходить на літній час
В Аризоні є місто Навахо Нейшн, яке дотримується літнього часу. Аризона не практикує літній час.
Неправда 19: Крім літнього часу, кожне місто в державі дотримується одного й того ж часового поясу
В Індіані, США, більшість міст дотримується Східноамериканського стандартного часу, але кілька вирішили дотримуватися Центрального стандартного часу
Неправда 20: Кожне місто знаходиться в одному часовому поясі
У минулому декілька разів межа штату або часовий пояс були проведені без уваги до того, хто саме проживав там, розрізаючи місто пополам. Існує дивовижно велика кількість прикладів. Це також причина, чому координати GPS надійніше, ніж назви міст, для визначення часового поясу.
- Колумбус, Джорджія. Колумбус знаходиться за східним часом, але велика частина міської території знаходиться у Фенікс-Сіті, штат Алабама, яке офіційно живе за центральним часом.
- Мічиган-Сіті, Індіана. Мічиган-Сіті знаходиться в центральній частині, але берег постійно заселений аж до південно-західного Мічигану, який знаходиться у східному часі.
- Залежно від пори року райони Луїсвілля, Цинциннаті, Саут-Бенд і Елкхарт розташовані на кордоні Індіани таким чином, що вони перетинають лінію часового поясу.
- Юма, Аризона. Частину року в Юмі інший час, ніж у сусідній Каліфорнії. Однак дуже мала частина міської території перетинає Каліфорнію.
На міжнародному рівні важче знайти приклади:
- На палестинських територіях використовується дещо інший графік переходу на літній час, ніж у власне Ізраїлі, тому міська територія Єрусалиму розділена на частини року. Крім того, останнім часом Йорданія робила деякі дивні речі з літнім часом, тому час між Ейлатом (Ізраїль) і Акабою (Йорданія) іноді змінюється.
- Асунсьйон (Парагвай) знаходиться через річку від меншого аргентинського міста під назвою Клорінда, але незрозуміло, чи справді вони утворюють одну урбанізовану територію. Прямо між ними немає мосту. Вниз по річці знаходяться Посадас (Аргентина) і Енкарнасьйон (Парагвай), між якими є міст.
- Сінгапур знаходиться через протоку від Батама (Індонезія), яке, принаймні офіційно, знаходиться в іншому часовому поясі.
- Ашкабад (Туркменістан, поблизу Ірану) і Лахор (Пакистан, поблизу Індії) знаходяться близько, але в різному часі.
Неправда 21: Для кожного місця на Землі є визначений часовий пояс
На північному і південному полюсі немає офіційного часового поясу. Дослідники там просто дотримуються часу своєї власної країни.
За матеріалами: Zain Rizvi
The post Як «зламати» мозок програмісту: попросити написати його автоматичний годинник appeared first on .