Daylight Saving Time

Horário de verão explicado: como o DST afeta os timestamps Unix

O horário de verão adianta os relógios locais na primavera e atrasa-os no outono. Os timestamps Unix são imunes (contam sempre UTC), mas cada conversão entre tempo Unix e hora local tem de saber se o horário de verão está ativo. Este guia explica o que é o DST, onde se aplica, os bugs de buraco e sobreposição que cria, e como lidar com ele corretamente.

O DST e o tempo Unix num minuto

O horário de verão adianta os relógios locais uma hora na primavera e atrasa-os uma hora no outono. Um timestamp Unix nunca se move — conta segundos UTC e avança a direito através de cada transição — por isso é imune ao DST. O que muda é a hora local que mostras para ele. Duas transições causam quase todos os bugs de DST: o buraco da primavera, em que uma hora de tempo local nunca acontece, e a sobreposição do outono, em que uma hora acontece duas vezes. A tabela abaixo indica quando as principais regiões mudam.

RegiãoAdianto (primavera)Atraso (outono)Mudança de relógio
EUA e Canadá2.º domingo de março1.º domingo de novembro02:00 → 03:00 local
União EuropeiaÚltimo domingo de marçoÚltimo domingo de outubro01:00 UTC, +1 hora
Reino UnidoÚltimo domingo de marçoÚltimo domingo de outubroGMT ↔ BST
Austrália (estados que o aplicam)1.º domingo de outubro1.º domingo de abrilHemisfério sul — invertido

O que é o horário de verão?

O horário de verão (DST) é a prática de adiantar os relógios locais uma hora durante parte do ano para prolongar a luz da tarde. Cerca de 70 países aplicam-no atualmente, sobretudo em latitudes temperadas. A transição é uma descontinuidade na hora do relógio de parede, não em UTC — os timestamps Unix continuam a avançar sem solavancos através de cada adianto e atraso.

  • Hemisfério norte: os relógios costumam adiantar em março e atrasar em outubro/novembro
  • Hemisfério sul: os relógios adiantam em outubro e atrasam em março/abril
  • As regiões tropicais e equatoriais geralmente não aplicam o DST
  • O DST acrescenta uma hora de luz à tarde mas não altera a quantidade total de luz do dia

Como as transições de DST afetam os timestamps Unix

Um timestamp Unix é o número de segundos decorridos desde 1970 UTC, por isso não pode saltar à frente nem repetir-se. O que muda é a interpretação em hora local desses segundos. Num adianto da primavera, o relógio local salta de 02:00 para 03:00 — a hora de relógio de parede de 02:00 a 02:59 nunca ocorre localmente. No atraso, o relógio local de 01:00 a 01:59 ocorre duas vezes, com uma hora de intervalo em UTC.

  • Nenhum timestamp Unix é alguma vez saltado ou duplicado pelo DST
  • Um dado timestamp Unix corresponde a uma hora local específica, incluindo o deslocamento (PDT vs PST, BST vs GMT, etc.)
  • Uma dada hora local pode corresponder a zero (buraco de DST) ou dois (sobreposição de DST) timestamps Unix
  • Usa nomes IANA (America/Los_Angeles) para que o DST seja aplicado por ti; nunca codifiques à mão um deslocamento como UTC−8 se o local aplica DST

O buraco e a sobreposição de DST explicados

As duas transições criam os dois bugs clássicos de DST. O buraco da primavera é a fonte mais comum de falhas de agendamento e lembretes — um evento marcado para as 02:30 no dia da transição não existirá localmente. A sobreposição do outono é a mais subtil — um evento às 01:30 no dia da transição existe duas vezes, com uma hora de intervalo. Cada caso exige uma política explícita.

TransiçãoO relógio fazEfeito na hora local
Adianto (primavera)02:00 → 03:0002:00–02:59 nunca existe (o "buraco")
Atraso (outono)02:00 → 01:0001:00–01:59 ocorre duas vezes (a "sobreposição")
  • Buraco: ISO 8601 / RFC 3339 não consegue representar sem ambiguidade uma hora dentro do buraco
  • Sobreposição: anota qual ocorrência com um deslocamento explícito (UTC−5 vs UTC−4)
  • Python: o zoneinfo trata buraco/sobreposição via o atributo fold (0 = primeira ocorrência, 1 = segunda)
  • JavaScript Temporal: ZonedDateTime aceita uma opção de desambiguação ("earlier", "later", "compatible", "reject")
  • Um cron às 02:30 numa zona com DST salta no adianto ou dispara duas vezes no atraso — agenda em UTC se possível

Que regiões aplicam o DST

A adoção do DST é um mosaico e muda com regularidade — consulta sempre os tzdata IANA atuais em vez de codificar uma regra à mão. O seguinte é amplamente correto para 2026.

  • Estados Unidos: a maioria dos estados aplica o DST (março–novembro). O Arizona (exceto a Nação Navajo) e o Havai não
  • Canadá: a maioria das províncias aplica o DST. Saskatchewan, a maior parte do Yukon e (desde 2026) a maior parte da Colúmbia Britânica não
  • União Europeia: aplica o DST (último domingo de março → último domingo de outubro). Uma votação de 2019 para o abolir foi adiada
  • Reino Unido: aplica o DST como BST (UTC+1) no verão
  • México: aboliu o DST nacional em 2022; só os municípios fronteiriços alinhados com os EUA o continuam a aplicar
  • Austrália: só NSW, Vitória, Tasmânia, ACT e Austrália Meridional aplicam o DST (outubro–abril)
  • A maior parte da Ásia, África e América do Sul: sem DST

Lidar com o DST em segurança no código

A abordagem fiável é ancorar tudo em timestamps Unix (ou datas-hora com fuso IANA) e tratar a hora local como uma questão de apresentação.

  • Armazenar: segundos epoch Unix ou um datetime ciente do fuso (p. ex. TIMESTAMPTZ no Postgres)
  • Calcular: em UTC ou em bibliotecas de data-hora cientes do IANA (Temporal, zoneinfo, java.time)
  • Apresentar: converter para o fuso IANA do utilizador no momento da renderização
  • Agendar: armazenar o fuso IANA ao lado da hora de parede local para eventos recorrentes que devem ficar às "9 da manhã locais"
  • Nunca armazenes a abreviatura EDT/PDT/CET como substituto do nome IANA

O impulso para abolir o DST

Vários parlamentos votaram pela abolição das mudanças de hora semestrais; poucas dessas votações levaram a mudanças reais de política. Atividade recente notável:

  • 2022: o Senado dos EUA aprovou por unanimidade a Sunshine Protection Act, que estagnou na Câmara
  • 2022: o México aboliu o DST nacional
  • 2024: Trump opôs-se publicamente ao DST permanente; o ímpeto no Senado abrandou
  • 2026: a Colúmbia Britânica passou a UTC−7 permanente; a Comissão de Energia e Comércio da Câmara dos EUA fez avançar um novo texto de abolição do DST
  • 2019: a UE votou em princípio abolir o DST mas adiou repetidamente a aplicação

Referências relacionadas

FAQ

O DST afeta os timestamps Unix?
Não. Os timestamps Unix contam segundos UTC desde 1970 e continuam sem solavancos através de cada transição de DST. Só muda a interpretação em hora local desses segundos.
O que é uma hora ambígua?
Uma hora ambígua é uma hora local que corresponde a dois instantes UTC diferentes. Acontece no atraso do outono, quando o relógio recua de 02:00 para 01:00 e a hora 01:00–01:59 ocorre duas vezes. Desambigua com um deslocamento explícito ou a opção fold / de desambiguação de uma biblioteca.
O que acontece às tarefas agendadas na transição de DST?
Uma tarefa cron numa zona com DST agendada para as 02:30 será saltada (adianto) ou executada duas vezes (atraso). A solução é agendar em UTC ou usar um agendador que desambigue explicitamente.
No código usa-se "EST" ou "America/New_York"?
America/New_York. O nome IANA aplica automaticamente EST (UTC−5) no inverno e EDT (UTC−4) no verão. Codificar "EST" à mão significa que os valores estão errados metade do ano.
Como lido corretamente com o DST no código?
Armazena e calcula em UTC (ou com datas-hora com fuso IANA) e converte para hora local apenas para apresentação. Usa nomes de fuso IANA como America/New_York, nunca deslocamentos fixos nem abreviaturas como EST, para que o DST seja aplicado por ti.
Quando começa e termina o DST em 2026?
Nos EUA, o DST começa às 02:00 locais a 8 de março de 2026 (adianto para 03:00) e termina às 02:00 locais a 1 de novembro de 2026 (atraso para 01:00). Na UE, as transições são a 29 de março e 25 de outubro de 2026.