Chrono Mock
JazykČeština

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í TZ funguje pro některá běhová prostředí a pro jiná ne. Nativní aplikace pro Windows, která čte GetTimeZoneInformation, 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.Local v .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:30 pro 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í →

Vyzkoušejte