Chrono Mock
МоваУкраїнська

Запустіть застосунок в іншому часовому поясі

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

Чому звичайні відповіді не допомагають

  • Зміна часового поясу 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 у цілих хвилинах. Усе поза цими межами відхиляється, а не тихо загортається.

Що з цього стосується вашого застосунку, можна виміряти, а не вгадувати. Сесія повідомляє про власне покриття →

Спробуйте