Execute um app em outro fuso horário
O relatório que cai no dia errado, o lembrete que dispara uma hora antes, o carimbo de data e hora que se lê como amanhã - quase tudo isso só aparece em um fuso em que você não está. Isto dá a um processo o próprio deslocamento, enquanto o fuso do seu sistema fica exatamente onde estava.
Por que as respostas habituais não ajudam
- Mudar o fuso horário do Windows o muda para tudo - seu calendário, seus logs, suas reuniões - e em uma máquina gerenciada pode não ser você quem decide mudá-lo.
- Definir
TZfunciona para alguns ambientes de execução e para outros não. Um aplicativo nativo do Windows que leiaGetTimeZoneInformationnão vai perceber de forma alguma. - As ferramentas de desenvolvedor do navegador sobrescrevem o fuso de uma página web, o que é excelente, e irrelevante para um aplicativo de desktop.
Um processo, um deslocamento
A sessão carrega o próprio deslocamento. O aplicativo pergunta ao Windows em que fuso está e recebe essa resposta, enquanto todos os outros programas da máquina recebem a real.
# O mesmo momento, visto da costa oeste dos Estados Unidos chrono run "C:\apps\test.exe" --at 2027-01-15T09:00:00 --zone -08:00 # Só o fuso - a data real de hoje, o relógio de outra pessoa chrono run "C:\apps\test.exe" --zone +09:00
A calculadora responde à outra metade da pergunta - o que um dado momento realmente marca em outro lugar. Converter preserva o instante e muda só o relógio de parede, que é exatamente como uma data cai no dia errado:
$ 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
Nove da manhã na Europa central é meia-noite na costa oeste dos Estados Unidos. O mesmo instante, e um relatório diário que agrupa por data local o coloca em um dia diferente conforme o lugar onde roda.
Limites honestos, e aqui eles importam
O fuso da sessão é um deslocamento fixo, sem horário de verão.
Uma sessão definida em +01:00 permanece em +01:00 quer o relógio marque
janeiro ou julho. Uma execução que cruza uma transição real se desvia, portanto, uma hora do que
aquele fuso realmente mostraria, e forçar um aplicativo a atravessar uma transição de horário de
verão é algo que esta ferramenta ainda não faz. A calculadora de datas diz isso em vez de
adivinhar.
- O fuso se apresenta como “Chrono Session”, um nome que nenhum registro do
Windows conhece. Tudo o que mapeia esse nome de volta para um fuso - inclusive o
TimeZoneInfo.Localdo .NET - recorre ao deslocamento, que é a resposta certa. Um aplicativo que insista em um nome de registro não vai encontrar nenhum. - O Java assume o fuso da sessão como um deslocamento. O fuso da sessão não tem
horário de verão nem cidade por trás, então o Java o nomeia pelo deslocamento -
GMT+05:30para uma sessão em +05:30. - No modo Chromium e Electron, as páginas também leem o fuso da sessão. É o mesmo deslocamento fixo: cada página e cada worker é colocado nele e confere o que lê. O processo principal de um aplicativo Electron executa JavaScript no Node, que a sessão não alcança, então ele mantém o relógio real.
- Os deslocamentos vão de -14:00 a +14:00 em minutos inteiros. Qualquer coisa fora disso é recusada em vez de ser dobrada em silêncio.
Qual desses casos se aplica ao seu aplicativo é algo que se mede, e não que se adivinha. A sessão relata a própria cobertura →