Запустіть застосунок в іншому часовому поясі
Звіт, що потрапляє не в той день, нагадування, що спрацьовує на годину раніше, мітка часу, яка читається як «завтра» — більша частина цього проявляється лише в поясі, у якому ви не перебуваєте. Ця програма дає одному процесу власне зміщення, а ваш системний пояс лишається рівно там, де був.
Чому звичайні відповіді не допомагають
- Зміна часового поясу Windows змінює його для всього — календаря, логів, зустрічей — а на керованій машині змінювати його, можливо, не вам.
- Встановлення
TZпрацює для одних середовищ виконання і не працює для інших. Нативний застосунок Windows, що читаєGetTimeZoneInformation, його взагалі не помітить. - Інструменти розробника в браузері перевизначають пояс для вебсторінки, що чудово й не стосується настільного застосунку.
Один процес — одне зміщення
Сесія несе власне зміщення. Застосунок питає в Windows, у якому він поясі, і отримує саме цю відповідь, а будь-яка інша програма на машині отримує справжню.
# Той самий момент, яким його бачать із західного узбережжя Америки chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00 # Лише пояс — сьогоднішня справжня дата, чужий годинник chrono run "C:\apps\test.exe" --zone +09:00
Калькулятор відповідає на другу половину питання — як цей момент насправді читається в іншому місці. Перетворення зберігає момент і змінює лише настінний годинник, і саме так дата потрапляє не в той день:
$ chrono calc --base 2027-01-15T09:00:00 --zone +01:00 --to-zone -08:00 Chrono Mock - date calculator base: 2027-01-15T09:00:00 step 1: zone -08:00 -> 2027-01-15T00:00:00 result: 2027-01-15T00:00:00 formats: ISO date 2027-01-15 ISO datetime 2027-01-15T00:00:00-08:00 US 01/15/2027 PL 15.01.2027
Дев’ята ранку в Центральній Європі — це північ на західному узбережжі Америки. Той самий момент, а добовий звіт, що групує за місцевою датою, віднесе його до різних днів залежно від того, де він запущений.
Чесні обмеження, і тут вони важливі
Пояс сесії — це фіксоване зміщення без літнього часу.
Сесія, налаштована на +01:00, лишається на +01:00, показує її годинник
січень чи липень. Тому запуск, що перетинає справжній перехід, розходиться на годину з тим, що цей
пояс справді показав би, а проведення застосунку через перехід на літній час цей
інструмент поки не робить. Калькулятор дат каже про це, а не вгадує.
- Пояс називає себе «Chrono Session» — іменем, якого не знає жоден реєстр
Windows. Усе, що зіставляє це ім’я назад із поясом, — зокрема
TimeZoneInfo.Localу .NET, — повертається натомість до зміщення, що й є правильною відповіддю. Застосунок, який наполягає на назві з реєстру, її не знайде. - Java приймає пояс сесії як зміщення. У поясу сесії немає літнього часу й
немає міста за ним, тому Java називає його за зміщенням —
GMT+05:30для сесії на +05:30. - У режимі Chromium і Electron сторінки теж читають пояс сесії. Це те саме фіксоване зміщення: кожна сторінка й кожен воркер переводиться на нього й перевіряє те, що читає. Головний процес застосунку Electron виконує JavaScript у Node, куди сесія не сягає, тому він залишається на справжньому годиннику.
- Зміщення йдуть від -14:00 до +14:00 у цілих хвилинах. Усе поза цими межами відхиляється, а не тихо загортається.
Що з цього стосується вашого застосунку, можна виміряти, а не вгадувати. Сесія повідомляє про власне покриття →