← Todos os artigos

Hora Unix vs hora POSIX vs epoch timestamp: terminologia explicada

"Epoch timestamp", "hora Unix" e "hora POSIX" são usados de forma intercambiável e, no código do dia a dia, são o mesmo número — segundos desde 1970-01-01 UTC. Mas vêm de lugares diferentes: a hora Unix é uma convenção, a hora POSIX é uma especificação formal (IEEE Std 1003.1) e "epoch" é um termo genérico para qualquer instante de referência. Este guia associa cada termo ao seu padrão e mostra onde as diferenças — segundos intercalares, intervalo e outras epochs — realmente importam.

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.

TermoContaDefinido porSegundos intercalaresNotas
Hora UnixSegundos desde 1970-01-01 00:00:00 UTCConvenção (Unix / biblioteca C)IgnoradosO nome do dia a dia entre programadores
Hora POSIXSegundos desde a epoch, por uma fórmula fixaIEEE Std 1003.1 §4.16Ignorados — cada dia tem exatamente 86 400 sA versão formalmente especificada da hora Unix
Epoch timestampUma contagem desde uma epoch fixa (normalmente a epoch Unix)Termo genérico — a epoch variaDepende da epoch/do sistema"Epoch" é o instante de referência, nem sempre 1970
Epoch em milissegundosMilissegundos desde 1970-01-01 UTCMesma epoch, unidade mais finaIgnorados13 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.