Ejecuta una app en otra zona horaria
El informe que cae en el día equivocado, el recordatorio que salta una hora antes, la marca de tiempo que se lee como mañana - casi todo esto solo aparece en una zona en la que no estás sentado. Esto da a un proceso su propio desfase, mientras tu zona del sistema sigue exactamente donde estaba.
Por qué no ayudan las respuestas habituales
- Cambiar la zona horaria de Windows la cambia para todo - tu calendario, tus registros, tus reuniones - y en un equipo administrado puede que no te corresponda cambiarla.
- Definir
TZfunciona con algunos entornos de ejecución y con otros no. Una aplicación nativa de Windows que leaGetTimeZoneInformationno lo notará en absoluto. - Las herramientas de desarrollo del navegador sobrescriben la zona de una página web, lo cual es excelente e irrelevante para una aplicación de escritorio.
Un proceso, un desfase
La sesión lleva su propio desfase. La aplicación pregunta a Windows en qué zona está y recibe esa respuesta, mientras que todos los demás programas del equipo reciben la real.
# El mismo momento, visto desde la costa oeste de Estados Unidos chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00 # Solo la zona - la fecha real de hoy, el reloj de otra persona chrono run "C:\apps\test.exe" --zone +09:00
La calculadora responde a la otra mitad de la pregunta - qué marca realmente un momento dado en otro lugar. Convertir conserva el instante y cambia solo el reloj de pared, que es exactamente como una fecha cae en el día equivocado:
$ 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
Las nueve de la mañana en Europa central son la medianoche en la costa oeste de Estados Unidos. El mismo instante, y un informe diario que agrupa por fecha local lo coloca en un día distinto según dónde se ejecute.
Límites honestos, y aquí importan
La zona de la sesión es un desfase fijo sin horario de verano.
Una sesión configurada en +01:00 se queda en +01:00 tanto si su reloj
marca enero como julio. Una ejecución que cruce una transición real se desvía por tanto una hora
de lo que esa zona mostraría de verdad, y hacer pasar a una aplicación por un cambio de horario de
verano es algo que esta herramienta todavía no hace. La calculadora de fechas lo dice en lugar de
adivinar.
- La zona se presenta como «Chrono Session», un nombre que ningún registro de
Windows conoce. Todo lo que relacione ese nombre con una zona - entre ello
TimeZoneInfo.Localde .NET - recurre en su lugar al desfase, que es la respuesta correcta. Una aplicación que insista en un nombre del registro no encontrará ninguno. - Java toma la zona de la sesión como un desfase. La zona de la sesión no tiene
horario de verano ni ciudad detrás, así que Java la nombra por su desfase -
GMT+05:30para una sesión en +05:30. - En el modo Chromium y Electron, las páginas también leen la zona de la sesión. Es el mismo desfase fijo: cada página y cada worker se coloca en él y comprueba lo que lee. El proceso principal de una aplicación Electron ejecuta JavaScript en Node, al que la sesión no llega, así que conserva el reloj real.
- Los desfases van de -14:00 a +14:00 en minutos enteros. Todo lo que quede fuera se rechaza en lugar de envolverse en silencio.
Cuál de estos casos se aplica a tu aplicación es algo que se mide, no que se adivina. La sesión informa de su propia cobertura →