CEVIU Logo
Voltar
British Columbia, fusos horários e Postgres

British Columbia, fusos horários e Postgres

Aprofundamento CEVIU

Aprofundamento

Armazenar datas em sistemas de agendamento exige mais do que converter horários locais para UTC. O caso da Colúmbia Britânica, que adotou permanentemente o horário de verão (UTC-7), mostra um problema clássico em bancos de dados: timestamptz não preserva a intenção local do usuário. Quando uma consulta é feita, o Postgres usa as regras atuais do fuso para converter de volta para o horário local. Se essas regras mudarem entre o cadastro e a consulta, como ocorreu com o fim do retorno ao horário padrão em Vancouver , , o horário exibido pode estar errado, mesmo que o UTC esteja correto.

A solução técnica sólida é o dual column pattern: armazenar separadamente o timestamp local, o nome do fuso (IANA) e o equivalente UTC calculado. Isso garante que a intenção original, por exemplo, 'reunião às 10h em Vancouver', permaneça imutável, enquanto o UTC é recalculado conforme as regras vigentes. Esse modelo é essencial para eventos futuros em que a hora marcada na parede é o que vale, como consultas médicas, reuniões ou prazos legais.

Por que isso importa

Muitos sistemas confiam cegamente em timestamptz pensando que estão resolvendo tudo, mas se expõem a erros silenciosos quando fusos mudam. A atualização do tzdata no Ubuntu, que acontece a cada poucos meses, pode alterar retroativamente como horários são interpretados. Sem o padrão de duas colunas, você não tem como saber se um compromisso futuro será exibido na hora certa. Isso não é teoria: já afeta dados reais em 2026. Quem opera com calendários precisa tratar o fuso como parte do dado, não como metadado descartável.

Linha do tempo

  1. Publicação do RFC 9557, propondo inclusão de nome de fuso em timestamps, mas sem suporte a preservação de intenção local futura.

  2. Colúmbia Britânica adota permanentemente o horário de verão (UTC-7), eliminando o retorno ao horário padrão.

  3. Alerta técnico destaca risco em bancos de dados Postgres por conta da mudança de fuso e recomenda uso do dual column pattern para preservar intenção de horário local.

Perguntas frequentes

Por que não posso confiar só no timestamptz para agendamentos futuros?

Porque timestamptz converte para UTC na inserção usando as regras de fuso daquele momento. Se as regras mudam depois, como o fim do horário de inverno em Vancouver , , a conversão de volta para o horário local usa a nova regra, gerando um descompasso. O usuário marcou 10h, mas o sistema mostra 11h.

O que é o dual column pattern e quando devo usá-lo?

É o armazenamento de três informações: horário local, nome do fuso (ex: America/Vancouver) e o UTC correspondente. Use quando a intenção do usuário sobre o horário local for crítica, como em calendários. Para logs ou transações passadas, timestamptz puro ainda é suficiente.

Posso usar RFC 9557 para resolver isso?

Não. O RFC 9557 propõe um formato que inclui o fuso no timestamp (ex: 2026-11-10T10:00:00-08:00[America/Vancouver]), mas o próprio padrão diz que não resolve mudanças futuras no fuso. Ele não garante que o horário local se mantenha válido se as regras do fuso mudarem.

Como corrigir dados já afetados pela mudança de fuso?

Primeiro, identifique quando o tzdata foi atualizado no seu sistema. Depois, localize registros futuros em fusos impactados. Recalcule o UTC a partir do horário local e do fuso usando um trigger ou script. Teste em ambiente não produtivo antes. Notifique usuários se houver ajuste visível no horário.

Fontes

Avalie este artigo:
Compartilhar:
Categoria
CEVIU Dados
Publicado
25 de junho de 2026
Editoria
CEVIU Dados

Quer receber mais sobre CEVIU Dados?

Conteúdo curado diariamente, direto no seu e-mail.

Conteúdo curado diariamenteDiversas categoriasCancele quando quiser