Hora Unix, hora POSIX, epoch timestamp: a resposta curta
No código do dia a dia, os três termos significam o mesmo número: segundos desde 1970-01-01 00:00:00 UTC. A distinção está na sua origem. "Hora Unix" é uma convenção herdada dos primórdios do Unix e da biblioteca C. "Hora POSIX" é essa mesma contagem registada num padrão formal (IEEE Std 1003.1), que fixa cada dia em exatamente 86 400 segundos. "Epoch timestamp" é o mais genérico dos três — uma "epoch" é simplesmente um instante de referência fixo e, embora quase sempre se refira à epoch Unix de 1970, outros sistemas (NTP, GPS, Windows) contam a partir de epochs diferentes. A tabela abaixo associa cada termo ao seu padrão e à forma como trata os segundos intercalares.
| Termo | Conta | Definido por | Segundos intercalares | Notas |
|---|---|---|---|---|
| Hora Unix | Segundos desde 1970-01-01 00:00:00 UTC | Convenção (Unix / biblioteca C) | Ignorados | O nome do dia a dia entre programadores |
| Hora POSIX | Segundos desde a epoch, por uma fórmula fixa | IEEE Std 1003.1 §4.16 | Ignorados — cada dia tem exatamente 86 400 s | A versão formalmente especificada da hora Unix |
| Epoch timestamp | Uma contagem desde uma epoch fixa (normalmente a epoch Unix) | Termo genérico — a epoch varia | Depende da epoch/do sistema | "Epoch" é o instante de referência, nem sempre 1970 |
| Epoch em milissegundos | Milissegundos desde 1970-01-01 UTC | Mesma epoch, unidade mais fina | Ignorados | 13 dígitos hoje; por omissão em JavaScript e Java |
O que é um epoch timestamp?
Um epoch timestamp é uma contagem numérica medida a partir de um momento de referência fixo chamado epoch. No uso quotidiano dos programadores, epoch timestamp normalmente significa carimbo de data/hora Unix: o número de segundos desde 1 de janeiro de 1970 às 00:00:00 UTC. Um valor de 0 significa a epoch Unix exata. Os valores positivos são posteriores a 1970; os negativos, anteriores. A palavra que faz o trabalho é "epoch" — nomeia o instante inicial, e tudo o resto é apenas contar a partir daí. Para a definição simples e o significado do carimbo zero, consulte A hora epoch explicada; este artigo foca-se em como os três nomes concorrentes se relacionam.
Hora Unix vs hora POSIX: o que diz o padrão
A hora Unix e a hora POSIX referem-se à mesma contagem, mas só a hora POSIX está formalmente especificada. A IEEE Std 1003.1 — o padrão POSIX — define "Seconds Since the Epoch" com uma fórmula explícita que converte uma data de calendário UTC num único inteiro. A propriedade definidora dessa fórmula é que trata cada dia como exatamente 86 400 segundos (60 × 60 × 24). É uma simplificação deliberada: ignora os segundos intercalares, trocando a precisão astronómica por um valor trivial de calcular, ordenar e armazenar. "Hora Unix" é o nome coloquial da mesma grandeza, anterior ao padrão; "hora POSIX" é o que se cita quando se precisa da definição precisa.
- Fórmula POSIX: uma data UTC mapeia para um inteiro, com cada dia fixado em 86 400 segundos
- Consequência: um carimbo Unix/POSIX segue o UTC mas nunca conta os segundos intercalares inseridos
- time_t é o tipo C que o guarda — historicamente com sinal de 32 bits, agora normalmente com sinal de 64 bits
- Mesmo instante → mesmo valor em qualquer sistema conforme, independentemente do fuso ou da localização
A hora Unix e a hora POSIX alguma vez diferem de facto?
Para quase todo o software, não — são o mesmo número e pode usar os termos de forma intercambiável. As diferenças só surgem na fronteira entre o tempo civil e a física. Como ambas ignoram os segundos intercalares, um carimbo Unix/POSIX não é uma contagem real de segundos SI decorridos desde 1970: não inclui os 27 segundos intercalares inseridos no UTC desde 1972. (O TAI, uma escala de tempo atómica contínua, está exatamente 37 segundos à frente do UTC desde 2017.) Em torno de um segundo intercalar, um relógio POSIX repete ou salta um segundo para que o dia continue com exatamente 86 400 segundos. As grandes plataformas evitam essa descontinuidade com o leap smearing — distribuindo o segundo adicional por um dia inteiro para que nenhum carimbo seja ambíguo. Se faz cronometragem de alta precisão, agenda através de um segundo intercalar ou compara com GPS ou TAI, é aí que "Unix" e "POSIX" deixam de ser académicos e o modelo de segundos intercalares importa.
Outras epochs que vai encontrar
"Epoch timestamp" só significa "carimbo Unix" por convenção. Uma epoch é simplesmente o instante a partir do qual um relógio conta, e vários sistemas muito usados contam a partir de outra. Quando um valor não descodifica para uma data plausível dos anos 2020 com a epoch Unix, a razão é muitas vezes uma epoch diferente.
- Epoch Unix/POSIX — 1970-01-01 UTC; segundos (ou ms/µs). A predefinição quase em todo o lado
- Epoch NTP — 1900-01-01 UTC; usada pelo Network Time Protocol (RFC 5905)
- Epoch GPS — 1980-01-06; a hora GPS não tem segundos intercalares, por isso derivou à frente do UTC (18 segundos em 2026)
- Windows FILETIME — 1601-01-01 UTC, contado em intervalos de 100 nanossegundos
- JavaScript / Java — a epoch Unix mas em milissegundos, por isso esses valores têm 13 dígitos
Porque o carimbo desde 1970 se tornou padrão
A epoch Unix era prática para os primeiros sistemas Unix e tornou-se convenção à medida que as ideias do Unix se espalharam pelas bibliotecas C, Linux, bases de dados, servidores web e linguagens de programação. Um único carimbo numérico é mais fácil de ordenar, comparar, transmitir e armazenar do que uma cadeia de data localizada. Quando a biblioteca C e depois o POSIX padronizaram a contagem, 1970 ficou fixado em todo o ecossistema — por isso um valor gerado numa plataforma descodifica de forma idêntica em qualquer outra.
Exemplos de epoch timestamp
Alguns valores conhecidos tornam a definição mais fácil de memorizar.
- 0 = 1970-01-01 00:00:00 UTC
- 1 = 1970-01-01 00:00:01 UTC
- 86400 = 1970-01-02 00:00:00 UTC
- 1700000000 = 2023-11-14 22:13:20 UTC
- 1767225600 = 2026-01-01 00:00:00 UTC
Artigos relacionados
FAQ
- A hora epoch é o mesmo que a hora Unix?
- No uso comum dos programadores, sim. A hora epoch normalmente significa hora Unix: os segundos decorridos desde 1970-01-01 00:00:00 UTC.
- Qual é a definição da hora Unix?
- A hora Unix é definida como os segundos desde 1970-01-01 00:00:00 UTC, sem contar os segundos intercalares.
- O que é a hora POSIX?
- A hora POSIX é a versão formalmente especificada da hora Unix. A IEEE Std 1003.1 ("Seconds Since the Epoch") fornece uma fórmula exata que conta os segundos desde 1970-01-01 00:00:00 UTC e trata cada dia como exatamente 86 400 segundos.
- Porque é que a hora POSIX ignora os segundos intercalares?
- Por desenho. A fórmula POSIX fixa um dia em exatamente 86 400 segundos para que o valor seja simples de calcular e armazenar. Como resultado, um carimbo de data/hora Unix/POSIX segue o UTC mas não representa os segundos intercalares nele inseridos.
- Um carimbo de data/hora POSIX tem em conta o fuso horário?
- Não. Um carimbo de data/hora POSIX representa um instante. Os fusos horários só são aplicados ao formatar esse instante como data legível.
- As epoch timestamps são iguais no Windows, Linux e macOS?
- A epoch Unix (1970-01-01 00:00:00 UTC) é idêntica em plataformas e linguagens modernas, por isso o mesmo instante produz o mesmo carimbo Unix em todo o lado. O Windows usa internamente a sua própria epoch FILETIME (1601), mas os carimbos Unix e POSIX padrão usam 1970.