Timestamps Unix e fusos horários explicados
Os computadores guardam o tempo como um único número: a contagem de segundos desde um momento fixo. As pessoas leem o tempo como uma data, uma hora e um lugar. Quase todo bug com datas acontece na tradução entre os dois — uma reunião que fica uma hora defasada depois que os relógios mudam, uma data que aparece como 1970, uma exportação que sai com um dia de diferença. Este guia explica o que o número significa, como reconhecer as unidades dele e por que o mesmo instante tem uma hora local diferente em cada fuso horário.
O que um timestamp Unix conta
Um timestamp Unix é o número de segundos que se passaram desde 1º de janeiro de 1970, às 00:00:00 UTC, momento conhecido como época Unix. Ao meio-dia UTC de 24 de setembro de 2026, ele era 1.790.251.200.
O número é o mesmo em qualquer lugar da Terra no mesmo instante. Ele não carrega fuso horário: o fuso só aparece quando o número é transformado em uma data para uma pessoa ler. É por isso que os timestamps são a forma segura de guardar e trocar momentos entre sistemas, e as horas locais servem só para exibição.
O tempo Unix também ignora os segundos bissextos. Todo dia é contado como exatamente 86.400 segundos e, quando um segundo bissexto é acrescentado, o relógio simplesmente repete um segundo. Para quase todos os fins, isso é invisível, e os segundos bissextos estão com os dias contados: em 2022, a Conferência Geral de Pesos e Medidas decidiu deixar de acrescentá-los até 2035.
01º de janeiro de 1970, 00:00:00 UTC: a própria época.179025120024 de setembro de 2026, 12:00:00 UTC.-8640031 de dezembro de 1969: números negativos contam para trás.
Segundos ou milissegundos?
O mesmo momento costuma ser escrito em duas unidades. Ferramentas Unix, bancos de dados e a maioria das APIs usam segundos; JavaScript, Java e muitos sistemas de log usam milissegundos. Para datas deste século, o tamanho do número entrega a unidade: 10 dígitos são segundos; 13 dígitos, milissegundos.
O erro é fácil de perceber. Um valor em milissegundos lido como segundos vai parar dezenas de milhares de anos no futuro; um valor em segundos lido como milissegundos vai parar em janeiro de 1970. Se uma data aparece como 1970, a primeira coisa a verificar é a unidade.
O problema do ano 2038
Muitos sistemas mais antigos guardam o timestamp como um inteiro de 32 bits com sinal, cujo maior valor é 2.147.483.647. Esse segundo cai em 19 de janeiro de 2038, às 03:14:07 UTC. Um segundo depois, o número estoura e volta para 13 de dezembro de 1901.
Sistemas operacionais, bancos de dados e linguagens modernos usam tempo de 64 bits, o que empurra o limite para bilhões de anos à frente. O risco está em dispositivos embarcados, formatos de arquivo antigos e colunas de banco de dados declaradas como inteiros de 32 bits — e é por isso que datas muito distantes no futuro, como o fim de um financiamento de 30 anos, podem falhar hoje.
UTC, deslocamentos e fusos horários
O UTC, Tempo Universal Coordenado, é a referência em relação à qual todos os outros horários são medidos. Ele não muda com as estações do ano. O GMT é muitas vezes usado como o nome popular dele; para qualquer coisa que não seja astronomia, os dois podem ser tratados como a mesma coisa.
Um deslocamento UTC diz quanto um relógio local está adiantado ou atrasado em relação ao UTC: Lisboa no inverno está em UTC+0, Berlim em UTC+1, São Paulo em UTC−3, Tóquio em UTC+9. Os deslocamentos nem sempre são horas inteiras — a Índia está em UTC+5:30 e o Nepal em UTC+5:45 — e vão de UTC−12 a UTC+14.
Um fuso horário é mais do que um deslocamento. É todo o histórico de deslocamentos e regras de horário de verão de um lugar, registrado no banco de dados tz com nomes como Europe/Lisbon ou America/Sao_Paulo. Um software que converte datas passadas ou futuras precisa do fuso, e não só do deslocamento de hoje, porque as regras mudam: o Brasil, por exemplo, aboliu o horário de verão em 2019.
| Como é escrito | O que significa |
|---|---|
2026-09-24T12:00:00Z | ISO 8601 / RFC 3339 em UTC; o Z indica UTC. |
2026-09-24T13:00:00+01:00 | O mesmo instante, escrito com um deslocamento local de UTC+1. |
2026-09-24 13:00 | Uma hora local sem deslocamento nem fuso — ambígua até você saber onde foi escrita. |
1790251200 | O mesmo instante como timestamp Unix em segundos. |
Horário de verão
Muitos países adiantam os relógios em uma hora no verão e os atrasam no inverno, e nem todos fazem isso no mesmo dia. Na União Europeia, a mudança acontece às 01:00 UTC do último domingo de março e do último domingo de outubro, no mesmo instante em todos os Estados-membros. Os Estados Unidos mudam no segundo domingo de março e no primeiro domingo de novembro, às 2:00 no horário local. No hemisfério sul as estações são invertidas, e muitos países — entre eles o Brasil e a maior parte da Ásia e da África — não mudam o horário em momento algum.
Assim, durante algumas semanas a cada primavera e a cada outono, a diferença entre duas cidades fica uma hora diferente do habitual. É aí que as reuniões recorrentes se desencontram, e é por isso que uma ferramenta de agendamento precisa das cidades, e não de deslocamentos fixos.
As mudanças também criam horas locais que não existem e horas que acontecem duas vezes. Na noite de primavera em que os relógios são adiantados, 01:30 em Lisboa nunca acontece; na noite de outono, 01:30 acontece duas vezes, uma no horário de verão e outra no horário de inverno. Um timestamp não tem nenhum desses problemas, o que é mais um motivo para guardar instantes como timestamps.
Perguntas frequentes
Por que uma data aparece como 1º de janeiro de 1970?
Porque o valor guardado era 0, vazio ou um timestamp em segundos lido como milissegundos. A época é a aparência de uma data quando o número por trás dela é zero ou próximo de zero.
Um timestamp Unix está em UTC ou no horário local?
Em nenhum dos dois: é uma contagem de segundos a partir de um ponto de partida em UTC, e é a mesma em qualquer lugar da Terra. Só se torna uma hora UTC ou local quando é exibido.
Por que minha exportação sai com um dia de diferença?
Normalmente, uma data sem hora foi tratada como meia-noite UTC e depois exibida em um fuso atrás do UTC, o que a transforma na noite do dia anterior. Guarde datas que não têm hora do dia como datas simples, não como timestamps.
O que significa o Z no fim de um horário?
Ele indica que o horário está em UTC, o mesmo que +00:00. A letra vem do nome militar do fuso, “Zulu”.