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
TZmarche pour certains environnements d'exécution et pas pour d'autres. Une application Windows native qui litGetTimeZoneInformationne 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.Localde .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:30pour 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 →