O Que É um Timestamp Unix?
Um timestamp Unix é um único número: a contagem de segundos que se passaram desde a época Unix, definida como 00:00:00 UTC de 1º de janeiro de 1970. É isso. Sem fuso horário, sem string de data, sem nomes de meses — apenas um inteiro que aumenta uma unidade por segundo.
Como a época é fixa e universal, um timestamp como 1700000000 significa o mesmo instante exato em qualquer lugar da Terra. Um servidor em Tóquio e um laptop em Chicago concordarão que ele se refere a 14 de novembro de 2023 às 22:13:20 UTC. A exibição local difere conforme o fuso horário, mas o número subjacente nunca muda.
Uma simplificação intencional: o tempo Unix ignora segundos bissextos. Ele assume que cada dia tem exatamente 86.400 segundos, o que não é totalmente verdade na realidade astronômica, mas mantém a aritmética limpa. Mais sobre isso abaixo.
Por Que Engenheiros os Amam
Timestamps estão em toda parte no software — horários de modificação de arquivos, registros de banco de dados, respostas de API, campos de expiração JWT, linhas de log — e por boas razões:
- São um único valor. Um inteiro armazena uma data e hora completas. Sem análise, sem ambiguidade sobre
MM/DDversusDD/MM. - São independentes de fuso horário. O número é sempre UTC. Você converte para o horário local apenas quando o exibe para um humano.
- Comparação e ordenação são triviais. Qual evento veio primeiro? O inteiro menor. Duração entre dois eventos? Subtraia-os; a resposta está em segundos.
- Armazenam de forma compacta. Um único inteiro de 4 ou 8 bytes versus uma string formatada.
É por isso que tanta infraestrutura fala em segundos de época internamente, mesmo quando a interface mostra um amigável 2026-07-23. Se você quiser transitar entre as duas representações, um conversor de timestamp Unix faz a tradução em ambos os sentidos.
Lendo um: Um Exemplo Prático
Pegue o timestamp 1000000000 — um famoso, pois foi ultrapassado ao vivo na TV entre entusiastas Unix.
Para lê-lo manualmente, você divide os segundos em unidades maiores. Aproximadamente, 1.000.000.000 segundos são cerca de 31,7 anos (um ano tem ~31.556.952 segundos). Some isso à época de 1970 e você chega em 2001. O momento preciso é 09 de setembro de 2001, 01:46:40 UTC.
Raramente você faz essa aritmética manualmente — toda linguagem tem uma função embutida. Em Python:
```python from datetime import datetime, timezone datetime.fromtimestamp(1000000000, tz=timezone.utc)
2001-09-09 01:46:40+00:00
```
O ponto chave: a conversão é sempre ancorada ao UTC. A função transforma uma contagem bruta de segundos em uma data de calendário avançando a partir da época. Se você quiser o horário local, aplica um deslocamento de fuso horário após a conversão UTC — o timestamp em si não carrega nenhuma informação de fuso.
O Problema do Ano 2038
Aqui é onde a história fica interessante — e onde muitos sistemas, de outra forma bem construídos, têm um relógio interno que está contando o tempo.
Por décadas, o tipo padrão C usado para armazenar o tempo Unix, time_t, era comumente um inteiro de 32 bits com sinal. Um inteiro de 32 bits com sinal pode representar valores de −2.147.483.648 até 2.147.483.647. Esse limite superior é o problema.
Contando segundos a partir da época de 1970, o valor 2.147.483.647 é alcançado às 03:14:07 UTC de 19 de janeiro de 2038. Um segundo depois, o contador precisaria se tornar 2.147.483.648 — mas esse número não cabe em um inteiro de 32 bits com sinal. Em vez de continuar aumentando, os bits transbordam e retornam ao valor mais negativo, −2.147.483.648.
Um timestamp negativo é interpretado como um tempo antes da época. Então o relógio não apenas para — ele salta para trás, para 13 de dezembro de 1901. Qualquer sistema que confiava em seu time_t de 32 bits de repente acredita estar no início do século XX.
Isso é frequentemente chamado de bug Y2K38 ou o Bug do Milênio Unix, e estruturalmente é o mesmo tipo de transbordamento de largura fixa que impulsionou o susto do Ano 2000 — apenas mais distante e enraizado em limites de inteiros binários, em vez de anos com dois dígitos.
Onde Realmente Afeta
Desktops e servidores modernos de 64 bits foram amplamente corrigidos há anos. O risco se concentra em lugares difíceis de atualizar:
- Sistemas embarcados e industriais. Roteadores, controladores, dispositivos médicos, ECUs automotivas e hardware IoT que foram enviados com
time_tde 32 bits e podem operar intocados por 20+ anos. Muitos dispositivos implantados hoje ainda estarão em serviço em 2038. - Código C legado. Aplicações compiladas com uma definição antiga de
time_t, especialmente onde o tipo se infiltrou em formatos de disco ou protocolos de rede. - Bancos de dados e sistemas de arquivos antigos. Formatos de armazenamento que empacotavam timestamps em campos de 32 bits. Alguns sistemas mais antigos já mostram sintomas ao lidar com datas futuras distantes — pense em uma hipoteca de 20 anos ou um certificado que expira após 2038.
O modo de falha nem sempre é uma falha catastrófica. Às vezes é uma data sutilmente calculada errada: um token expirado que é lido como válido, uma ordem de classificação que se inverte, um trabalho agendado que dispara em 1901.
A Solução: Tempo de 64 Bits
O remédio é direto em princípio — ampliar time_t para 64 bits. Um inteiro de 64 bits com sinal pode contar segundos muito além de qualquer horizonte prático: o ponto de transbordamento fica cerca de 292 bilhões de anos no futuro, confortavelmente além da vida útil esperada do Sol.
A maioria dos sistemas operacionais atuais já fez essa mudança. Linux de 64 bits usa um time_t de 64 bits; até mesmo Linux de 32 bits ganhou suporte a tempo de 64 bits no kernel e na glibc nos últimos anos. A parte difícil não é a correção em si — é encontrar e reconstruir cada pedaço de firmware, cada formato armazenado e cada binário de terceiros que ainda assume 32 bits. Esse trabalho de auditoria é o verdadeiro projeto de 2038.
Como os Segundos Bissextos se Encaixam
O tempo astronômico e o tempo atômico se desviam ligeiramente, então o UTC oficial ocasionalmente insere um segundo bissexto para manter os relógios alinhados com a rotação da Terra. O tempo Unix, por design, finge que eles não existem — ele fixa 86.400 segundos por dia.
Quando ocorre um segundo bissexto, os sistemas tipicamente o "espalham" — distribuindo o segundo extra por uma janela (o Google popularizou um espalhamento de 24 horas) para que nenhum relógio precise mostrar o impossível 23:59:60. O resultado: os timestamps Unix permanecem suaves e monotônicos, ao custo de estarem uma fração minúscula de segundo fora do UTC estrito durante um espalhamento. Para praticamente todo software, essa é exatamente a troca que você deseja. O transbordamento de 2038 é um problema de largura de inteiro; os segundos bissextos são uma peculiaridade de definição separada e muito menor — não os confunda.
Principais Conclusões
- Um timestamp Unix são segundos desde 00:00:00 UTC de 1º de janeiro de 1970, ignorando segundos bissextos.
- É um único inteiro, independente de fuso horário — fácil de armazenar, comparar e ordenar.
- A conversão é sempre relativa ao UTC; o horário local é aplicado posteriormente.
- O
time_tde 32 bits com sinal transborda às 03:14:07 UTC de 19 de janeiro de 2038, retornando a um valor negativo e saltando para 1901. - A solução é o
time_tde 64 bits; o esforço é auditar sistemas embarcados e legados.
Quer ver em ação? Cole qualquer valor de época no conversor de timestamp Unix para lê-lo como uma data humana — ou vá no sentido contrário e transforme uma data em seu timestamp.
Perguntas Frequentes
Um timestamp Unix está em segundos ou milissegundos?
O tempo Unix clássico está em segundos. No entanto, JavaScript e muitas APIs web usam milissegundos desde a época, então um valor como 1700000000000 é 1.000× maior. Uma dica rápida: um timestamp baseado em segundos para uma data recente tem 10 dígitos; um em milissegundos tem 13. Em caso de dúvida, verifique a magnitude antes de converter.
O problema do Ano 2038 vai travar meu celular ou laptop?
Quase certamente não. Sistemas operacionais modernos de 64 bits já usam um time_t de 64 bits, que empurra o transbordamento para bilhões de anos no futuro. A exposição real está em dispositivos embarcados de longa duração e software antigo que ainda depende de tempo de 32 bits e pode não ser atualizado antes de 2038.
Um timestamp Unix pode ser negativo?
Sim. Valores negativos representam instantes antes da época de 1970 — por exemplo, -1 é 31 de dezembro de 1969, 23:59:59 UTC. Isso é exatamente o que um transbordamento de 32 bits produz em 2038, e é por isso que o relógio parece saltar de volta para 1901.
Por que o tempo Unix ignora segundos bissextos?
Para manter a matemática simples e previsível. Tratar cada dia como exatamente 86.400 segundos significa que durações são apenas subtrações, e os timestamps permanecem monotônicos. A pequena discrepância com o UTC astronômico é tratada "espalhando" o segundo bissexto, o que quase todas as aplicações preferem a lidar com um caso extremo de 23:59:60.
Como converto um timestamp sem escrever código?
Use uma ferramenta online. O conversor de timestamp Unix aceita um valor de época e mostra a data e hora UTC e local correspondentes instantaneamente, e também converte datas de calendário de volta em timestamps.