Lidando com Fusos Horários Corretamente
Fusos horários são notoriamente complicados em programação. Este guia ensina como lidar com eles corretamente.
Sempre Armazene UTC
Regra de ouro: sempre armazene timestamps em UTC (timestamps Unix são perfeitos). Nunca armazene tempo local em banco de dados. Por quê? Tempo local é ambíguo. Durante horário de verão, alguns tempos acontecem duas vezes ou não acontecem. Se usuário muda fusos horários, tempo local torna-se sem sentido. UTC não tem ambiguidade. É tempo de referência universal. Timestamps Unix são UTC por design. Use-os.
Converta em Exibição
Armazene UTC, exiba local. Quando mostra tempo para usuários, converta timestamp UTC para seu fuso horário local. Cada usuário vê tempo em seu próprio fuso horário, mas você armazena um timestamp UTC consistente. Como: Armazene fuso horário do usuário (nome como "America/Sao_Paulo"). Para exibição, converta timestamp UTC para fuso horário do usuário. Mostre tempo local ao usuário. Opcionalmente mostre fuso horário para clareza. Nunca faça o oposto (armazenar local, exibir UTC). Armazenamento local causa confusão massiva.
Horário de Verão
DST complica fusos horários. Quando relógios "saltam à frente," hora desaparece. Quando "caem para trás," hora acontece duas vezes. Timestamps Unix ignoram DST porque são UTC. UTC nunca muda para horário de verão. Isto é por que timestamps são superiores para armazenamento. Ao converter para fuso horário local, bibliotecas lidam com DST automaticamente. Use bibliotecas respeitáveis (Luxon, date-fns), não escreva lógica DST você mesmo.
Testar a Ferramenta
Conversor de Timestamp