Chrono Mock
LangueFrançais

Exécuter une appli dans un autre fuseau horaire

Le rapport qui tombe le mauvais jour, le rappel qui se déclenche une heure trop tôt, l'horodatage qui se lit comme demain - la plupart de ces bugs n'apparaissent que dans un fuseau où vous n'êtes pas. Ceci donne à un processus son propre décalage, pendant que votre fuseau système reste exactement où il était.

Pourquoi les réponses habituelles n'aident pas

  • Changer le fuseau horaire de Windows le change pour tout - votre calendrier, vos journaux, vos réunions - et sur une machine gérée, ce n'est peut-être pas à vous de le faire.
  • Définir TZ marche pour certains environnements d'exécution et pas pour d'autres. Une application Windows native qui lit GetTimeZoneInformation ne le remarquera pas du tout.
  • Les outils de développement du navigateur remplacent le fuseau pour une page web, ce qui est excellent, et sans rapport avec une application de bureau.

Un processus, un décalage

La session porte son propre décalage. L'application demande à Windows dans quel fuseau elle se trouve et reçoit cette réponse, pendant que tous les autres programmes de la machine reçoivent la vraie.

# Le même moment, vu de la côte ouest américaine
chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00

# Seulement le fuseau - la vraie date du jour, l'horloge de quelqu'un d'autre
chrono run "C:\apps\test.exe" --zone +09:00

Le calculateur répond à l'autre moitié de la question - ce qu'un moment donné indique réellement ailleurs. Convertir conserve l'instant et ne change que l'horloge murale, ce qui est exactement comment une date atterrit le mauvais jour :

$ 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

Neuf heures du matin en Europe centrale, c'est minuit sur la côte ouest américaine. Même instant, et un rapport quotidien qui regroupe par date locale le range un jour différent selon l'endroit où il s'exécute.

Des limites honnêtes, et elles comptent ici

Le fuseau de la session est un décalage fixe sans heure d'été.

Une session réglée sur +01:00 reste à +01:00 que son horloge indique janvier ou juillet. Une exécution qui franchit un vrai changement d'heure dérive donc d'une heure par rapport à ce que ce fuseau afficherait réellement, et faire traverser à une application un changement d'heure d'été n'est pas encore possible avec cet outil. Le calculateur de dates le dit plutôt que de deviner.

  • Le fuseau se déclare sous le nom « Chrono Session », un nom qu'aucun registre Windows ne connaît. Tout ce qui rapproche ce nom d'un fuseau - dont TimeZoneInfo.Local de .NET - se rabat sur le décalage, ce qui est la bonne réponse. Une application qui exige un nom de registre n'en trouvera pas.
  • Java prend le fuseau de la session sous forme de décalage. Le fuseau de la session n'a ni heure d'été ni ville derrière lui, si bien que Java le nomme d'après son décalage - GMT+05:30 pour une session à +05:30.
  • En mode Chromium et Electron, les pages lisent aussi le fuseau de la session. C'est le même décalage fixe : chaque page et chaque worker y est placé et vérifie ce qu'il lit. Le processus principal d'une application Electron exécute du JavaScript dans Node, que la session n'atteint pas, donc il garde l'horloge réelle.
  • Les décalages vont de -14:00 à +14:00 par minutes entières. Tout ce qui est en dehors est refusé plutôt que replié discrètement.

Lequel de ces points s'applique à votre application se mesure plutôt qu'il ne se devine. La session rapporte sa propre couverture →

L'essayer