Timestamps Unix explicados
Um timestamp Unix é só uma contagem de segundos, mas causa um fluxo constante de bugs. O que ele conta, como distinguir segundos de milissegundos num relance, o que acontece com fusos horários e segundos bissextos, e por que 2038 importa.
Abra quase qualquer arquivo de log, exportação de banco de dados ou resposta de API e você vai achar números como 1791288000 onde deveria haver uma data. Esse número é um timestamp Unix, o jeito mais comum de um computador guardar um instante. Este guia explica o que o número significa, como reconhecer sua unidade num relance, onde entram os fusos horários e por que o ano de 2038 importa.
O que o número significa
Um timestamp Unix é o número de segundos passados desde 1º de janeiro de 1970, 00:00:00 UTC, um instante conhecido como a época Unix. A escolha da data é histórica: era um número redondo conveniente quando o sistema operacional Unix estava sendo escrito nos Bell Labs, por volta de 1970.
A graça está na simplicidade. Um único inteiro é fácil de guardar, ordenar e comparar, dois instantes podem ser subtraídos para dar uma duração em segundos, e o mesmo número significa o mesmo instante no mundo inteiro. Alguns marcos ajudam a ter noção da escala:
| Timestamp | Instante (UTC) |
|---|---|
0 | 1º de janeiro de 1970, 00:00:00 |
-1 | 31 de dezembro de 1969, 23:59:59 |
1000000000 | 9 de setembro de 2001, 01:46:40 |
1234567890 | 13 de fevereiro de 2009, 23:31:30 |
1700000000 | 14 de novembro de 2023, 22:13:20 |
2000000000 | 18 de maio de 2033, 03:33:20 |
2147483647 | 19 de janeiro de 2038, 03:14:07 |
Números negativos são permitidos e contam para trás, então datas antes de 1970 também funcionam, desde que o programa que as lê espere isso.
Segundos, milissegundos ou mais?
A definição original usa segundos, mas muitos sistemas contam unidades menores a partir da mesma época. O Date.now() do JavaScript, o System.currentTimeMillis() do Java e a maioria das APIs web usam milissegundos. Bancos de dados e ferramentas de rastreamento às vezes usam microssegundos ou nanossegundos.
Para datas da nossa época, o número de dígitos entrega a unidade:
- 10 dígitos: segundos (isso vale até o ano de 2286).
- 13 dígitos: milissegundos.
- 16 dígitos: microssegundos.
- 19 dígitos: nanossegundos.
Confundi-los é um dos bugs de data mais comuns. Um valor em segundos lido como milissegundos cai em janeiro de 1970; um valor em milissegundos lido como segundos cai dezenas de milhares de anos no futuro. Se uma data no seu app aparece em 1970, um fator de 1.000 faltando é a primeira coisa a verificar. Nosso conversor de timestamp detecta a unidade pelo número de dígitos, e você pode mudá-la.
Fusos horários: o timestamp não tem nenhum
Um timestamp identifica um instante, não a leitura de um relógio de parede. O valor 1791288000 é o mesmo instante em Tóquio, Paris e Nova York; só a hora local muda. Convertê-lo numa data legível sempre envolve escolher um fuso horário, e a maioria dos erros acontece nesse passo.
O costume é guardar e transmitir timestamps em UTC e converter para a hora local só ao mostrá-los a uma pessoa. Ao converter uma data local de volta para timestamp, você precisa saber em que fuso estava essa data. «9 de março de 2025, 09:00» é um timestamp diferente em Berlim e em Chicago, e perto das mudanças de horário de verão uma hora local pode até existir duas vezes ou não existir.
Os segundos bissextos são ignorados
A rotação da Terra é levemente irregular, então o UTC oficial acrescentou de vez em quando um segundo bissexto, 27 entre 1972 e 2016. O tempo Unix finge que eles não existem: todo dia tem exatamente 86.400 segundos. Durante um segundo bissexto, o relógio Unix repete um segundo ou o distribui.
Para quase todo uso, isso é uma vantagem. Significa que o timestamp de qualquer data pode ser calculado com aritmética simples, e subtrair dois timestamps dá a diferença em segundos de calendário. Só aplicações que precisam medir intervalos físicos ao segundo através de um segundo bissexto, como alguns sistemas científicos, precisam se preocupar. Os órgãos internacionais de medição do tempo votaram por parar de acrescentar segundos bissextos até 2035.
O problema do ano 2038
Muitos sistemas antigos guardam o timestamp num inteiro de 32 bits com sinal. O maior valor que ele comporta é 2.147.483.647, que corresponde a 19 de janeiro de 2038 às 03:14:07 UTC. Um segundo depois, o número estoura e volta para o valor mais negativo, que esses sistemas leem como 13 de dezembro de 1901.
É o mesmo tipo de problema do bug do ano 2000, e está sendo resolvido do mesmo jeito: passando para números mais largos. Um timestamp de 64 bits com sinal dura cerca de 292 bilhões de anos. Sistemas operacionais, bancos de dados e linguagens modernos já usam tempo de 64 bits, mas aparelhos embarcados, formatos de arquivo antigos e alguns bancos de dados com colunas de timestamp de 32 bits vão precisar de atualização antes de 2038. Se você está projetando hoje um formato de arquivo ou uma coluna de banco de dados, dê a ela 64 bits.
Uma contagem de segundos de 64 bits com sinal dura cerca de 292 bilhões de anos, muito além desta escala.
Converter à mão e no código
Na maioria das linguagens a conversão cabe numa linha. Alguns exemplos:
// JavaScript: de segundos para Date, e de volta
new Date(1791288000 * 1000).toISOString(); // "2026-10-06T12:00:00.000Z"
Math.floor(Date.now() / 1000); // o timestamp atual em segundos
# Python
from datetime import datetime, timezone
datetime.fromtimestamp(1791288000, tz=timezone.utc)
-- PostgreSQL
SELECT to_timestamp(1791288000);As planilhas contam dias em vez de segundos, a partir da própria época. No Excel e no Google Sheets, um timestamp Unix na célula A1 vira data com =A1/86400+25569 (depois formate a célula como data), porque 25.569 é o número de dias entre 1º de janeiro de 1900 e 1º de janeiro de 1970 no calendário do Excel.
Para verificações rápidas, o conversor de timestamp mostra o timestamp atual correndo ao vivo, transforma qualquer timestamp numa data no fuso horário que você escolher (detectando a unidade para você), faz o caminho inverso a partir de uma data e mede a diferença entre duas datas. Ele roda no seu navegador, então os valores que você cola ficam no seu aparelho.
Perguntas e respostas
Por que minha data mostra 1º de janeiro de 1970?
O programa leu um valor zero, ou um timestamp em segundos como milissegundos. Procure um campo vazio e uma multiplicação ou divisão por 1.000 que esteja faltando.
Um timestamp Unix está em UTC?
Ele conta a partir de um instante definido em UTC e descreve o mesmo instante em todo lugar, então na prática sim. Ele só vira hora local quando você o converte para exibir.
Meu computador vai parar de funcionar em 2038?
Os sistemas atuais de computadores e celulares usam tempo de 64 bits e não são afetados. O risco está em aparelhos embarcados antigos, programas legados e formatos de dados que ainda guardam timestamps de 32 bits.
Como obter o timestamp Unix atual?
Num terminal do macOS ou Linux, rode date +%s. Em JavaScript, use Math.floor(Date.now() / 1000). O conversor de timestamp também o mostra ao vivo.
Ferramentas deste artigo
Mais do blog
ZIP, 7z ou RAR: qual formato de arquivo compactado é melhor?
Compactamos as mesmas pastas de fotos, vídeos, documentos e dados em ZIP, 7z e RAR e medimos tamanho e velocidade. O vencedor depende quase totalmente do que está dentro.
CSV, Excel ou JSON: qual formato para seus dados?
Salvamos a mesma tabela de 100 mil linhas em CSV, em uma pasta de trabalho do Excel e em JSON, e comparamos os tamanhos, a velocidade de leitura no código e o que dá errado com datas, zeros à esquerda e números longos.
Correção de erros e tamanho do QR code: L, M, Q e H testados
Uma correção de erros maior deixa um QR code resistir a danos, mas também o deixa mais denso. Geramos códigos para quatro tipos comuns de conteúdo em cada nível e os cobrimos aos poucos até pararem de ser lidos.