Spusťte aplikaci v jiném časovém pásmu
Sestava, která skončí ve špatný den, připomínka, která zazvoní o hodinu dřív, časové razítko, které se čte jako zítřek - většina z toho se projeví jen v pásmu, ve kterém právě nesedíte. Tohle dává jednomu procesu vlastní posun, zatímco vaše systémové pásmo zůstane přesně tam, kde bylo.
Proč obvyklé odpovědi nepomáhají
- Změna časového pásma Windows ho změní pro všechno - váš kalendář, logy, schůzky - a na spravovaném počítači nemusí být vaše právo ho měnit.
- Nastavení
TZfunguje pro některá běhová prostředí a pro jiná ne. Nativní aplikace pro Windows, která čteGetTimeZoneInformation, si ho vůbec nevšimne. - Vývojářské nástroje prohlížeče přepisují pásmo pro webovou stránku, což je vynikající a pro desktopovou aplikaci nepodstatné.
Jeden proces, jeden posun
Sezení nese vlastní posun. Aplikace se zeptá Windows, v jakém je pásmu, a dostane tuto odpověď, zatímco každý jiný program na počítači dostane skutečnou.
# Stejný okamžik, viděný ze západního pobřeží Ameriky chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00 # Jen pásmo - dnešní skutečné datum, cizí hodiny chrono run "C:\apps\test.exe" --zone +09:00
Kalkulačka odpovídá na druhou polovinu otázky - jak se daný okamžik skutečně čte jinde. Převod zachovává okamžik a mění jen kalendářní hodiny, což je přesně způsob, jak datum skončí ve špatný den:
$ 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
Devět hodin ráno ve střední Evropě je na západním pobřeží Ameriky půlnoc. Stejný okamžik a denní sestava, která seskupuje podle místního data, ho zařadí do jiného dne podle toho, kde běží.
Upřímná omezení, a tady na nich záleží
Pásmo sezení je pevný posun bez letního času.
Sezení nastavené na +01:00 zůstává na +01:00, ať jeho hodiny ukazují
leden, nebo červenec. Běh, který překročí skutečný přechod, se tedy odchýlí o hodinu od toho, co
by dané pásmo skutečně ukazovalo, a protažení aplikace přechodem na letní čas tento nástroj
zatím nedělá. Kalkulačka dat to říká, místo aby hádala.
- Pásmo se hlásí jako „Chrono Session“, jméno, které žádný registr Windows
nezná. Cokoli, co toto jméno převádí zpět na pásmo - mimo jiné
TimeZoneInfo.Localv .NET - se místo toho vrátí k posunu, což je správná odpověď. Aplikace, která trvá na názvu z registru, žádný nenajde. - Java přebírá pásmo sezení jako posun. Pásmo sezení nemá letní čas ani město
za sebou, takže ho Java pojmenuje podle jeho posunu -
GMT+05:30pro sezení na +05:30. - V režimu Chromium a Electron čtou pásmo sezení i stránky. Je to týž pevný posun: každá stránka a každý worker se na něj přepne a kontroluje, co čte. Hlavní proces aplikace Electron spouští JavaScript v Node, kam sezení nedosáhne, takže si ponechává skutečné hodiny.
- Posuny jdou od -14:00 do +14:00 v celých minutách. Cokoli mimo se odmítne, ne tiše zalomí.
Které z nich se týká vaší aplikace, lze změřit, ne hádat. Sezení hlásí vlastní pokrytí →