O que é um Timestamp Unix? O Guia Completo
O que é um Timestamp Unix?
Um timestamp Unix (também chamado de tempo POSIX ou tempo Epoch) é um sistema para rastrear o tempo que conta o número de segundos decorridos desde o epoch Unix — 00:00:00 UTC de 1 de janeiro de 1970 — excluindo segundos bissextos.
Ao contrário de datas legíveis por humanos que variam conforme o fuso horário ("19 de julho de 2026, 15:30 EST"), um timestamp Unix é um único inteiro que representa o mesmo momento em qualquer lugar da Terra. Por exemplo, o timestamp 1785292800 corresponde a um instante específico, independentemente de você estar em Nova York, Londres ou Tóquio.
Timestamps Unix são a espinha dorsal do tratamento de tempo na computação moderna. Sistemas operacionais, linguagens de programação, bancos de dados e sistemas de arquivos dependem dessa simples representação em inteiro nos bastidores.
O Epoch Unix: Por que 1 de janeiro de 1970?
A escolha de 1 de janeiro de 1970 como o "epoch" (o ponto de partida) não foi arbitrária. Várias considerações práticas levaram a essa decisão:
- Desenvolvimento inicial do Unix: O sistema operacional Unix foi desenvolvido nos Bell Labs no final dos anos 1960 e início dos anos 1970. Quando o sistema de tempo foi padronizado no início dos anos 1970, 1 de janeiro de 1970 era um ponto de referência limpo e recente.
- Simplicidade: O tempo nos primeiros sistemas Unix era armazenado como um inteiro com sinal de 32 bits contando segundos. Usar uma data recente maximizava o alcance representável para o futuro.
- Precedente: O epoch foi formalizado no primeiro padrão POSIX, tornando-o a referência universal para sistemas derivados do Unix.
Sistemas Unix-like anteriores usavam datas de epoch diferentes, mas o epoch de 1970 prevaleceu e tem sido o padrão para todos os sistemas compatíveis com POSIX desde então.
Como Funciona o Valor do Timestamp
A ideia central é simples:
- Um timestamp de
0significa exatamente 1 de janeiro de 1970, 00:00:00 UTC - Um timestamp de
86400(60 × 60 × 24) significa 2 de janeiro de 1970, 00:00:00 UTC - Um timestamp de
-3600significa 31 de dezembro de 1969, 23:00:00 UTC (timestamps negativos representam datas anteriores ao epoch)
A fórmula é simples:
timestamp = seconds since 1970-01-01 00:00:00 UTC
Timestamps em Milissegundos
Muitos sistemas modernos, particularmente JavaScript e APIs web, usam milissegundos em vez de segundos. Um timestamp em milissegundos é simplesmente o valor em segundos multiplicado por 1000:
- JavaScript
Date.now()retorna milissegundos - Python
time.time()retorna segundos como um float com milissegundos fracionários
Sempre verifique qual resolução um sistema usa antes de converter, pois misturá-las pode produzir datas com décadas de diferença.
O Problema do Ano 2038
O problema do ano 2038 (também chamado de "Unix Millennium Bug" ou "Y2K38") é uma questão de representação de tempo que afetará sistemas que armazenam timestamps como inteiros com sinal de 32 bits.
Um inteiro com sinal de 32 bits pode conter valores de aproximadamente -2,1 bilhões a +2,1 bilhões. O timestamp Unix máximo representável é 2147483647, que corresponde a:
- 19 de janeiro de 2038, 03:14:07 UTC
Um segundo depois, o valor transbordaria para -2147483648, que representa 13 de dezembro de 1901 — fazendo os sistemas interpretarem o horário atual como uma data do início do século XX.
Quais Sistemas São Afetados?
- Dispositivos embarcados e hardware de IoT com processadores de 32 bits
- Kernels Linux embarcados mais antigos
- Bancos de dados legados que usam colunas de tempo em inteiros de 32 bits
- Sistemas de arquivos e formatos binários que armazenam tempo como inteiros de 32 bits
A Solução
Os sistemas modernos, em sua maioria, migraram para inteiros de 64 bits para armazenamento de tempo. Um inteiro com sinal de 64 bits pode representar tempos de até aproximadamente 292 bilhões de anos no futuro — efetivamente infinito para qualquer propósito prático.
- A maioria das distribuições Linux modernas em hardware de 64 bits já está segura
- O kernel Linux usa um time_t de 64 bits em sistemas de 64 bits há anos
- O kernel 5.6+ introduziu suporte a time_t de 64 bits para arquiteturas de 32 bits
- Linguagens de programação como Python, Go e Java usam inteiros de 64 bits internamente
Se você mantém sistemas embarcados ou software legado, verificar o tamanho do seu time_t é um exercício que vale a pena hoje.
UTC e a Relação com Timestamps Unix
Timestamps Unix são inerentemente independentes de fuso horário — eles sempre se referem ao UTC.
O que é UTC?
O Tempo Universal Coordenado (UTC) é o padrão de tempo primário pelo qual o mundo regula relógios e tempo. Ele substituiu o Horário de Greenwich (GMT) como padrão internacional e é mantido por relógios atômicos.
Por que o UTC Importa para Timestamps Unix
- Timestamps Unix são definidos em UTC, então um timestamp representa o mesmo momento globalmente
- Converter um timestamp Unix para hora local é puramente uma preocupação da camada de exibição
- Nenhuma informação de fuso horário é armazenada no próprio timestamp, o que mantém o sistema simples e portátil
Esse design significa que você pode compartilhar um timestamp Unix com qualquer pessoa no mundo e ambas as partes podem convertê-lo para sua própria hora local sem ambiguidade.
Segundos Bissextos: A Exceção Rara
Timestamps Unix teoricamente contam segundos desde o epoch, mas ignoram segundos bissextos. Um dia com um segundo bissexto adicionado ainda tem exatamente 86400 segundos no tempo Unix. Isso significa que, durante um segundo bissexto, o timestamp Unix não avança, e o segundo bissexto efetivamente desaparece da contagem.
Essa simplificação mantém o sistema prático, mas significa que os timestamps Unix divergem ligeiramente do tempo atômico. A discrepância é pequena o suficiente para raramente importar em aplicações do dia a dia.
Faixas Comuns de Timestamps
| Timestamp | Data Legível por Humanos | Significado | |-----------|---------------------|--------------| | 0 | 1970-01-01 00:00:00 UTC | O epoch Unix | | 86400 | 1970-01-02 00:00:00 UTC | Um dia após o epoch | | 946684800 | 2000-01-01 00:00:00 UTC | O ano 2000 | | 1234567890 | 2009-02-13 23:31:30 UTC | Um padrão memorável | | 1785292800 | 2026-07-19 00:00:00 UTC | O epoch de hoje | | 2147483647 | 2038-01-19 03:14:07 UTC | Máximo de 32 bits |
Resumo
Um timestamp Unix é uma forma elegante e portátil de representar o tempo como um único inteiro. Seu design — contar segundos a partir de 1 de janeiro de 1970 UTC — o torna o padrão universal de tempo em sistemas operacionais, bancos de dados e linguagens de programação. Embora o problema de 2038 se aproxime para sistemas legados, a transição em andamento para o tempo de 64 bits garante que o timestamp Unix continuará sendo a base da medição de tempo na computação por gerações.
Pronto para trabalhar com timestamps Unix? Use nosso Conversor de Timestamp Unix para converter instantaneamente entre timestamps e datas legíveis por humanos.