Timestamp Formats

Formatos de timestamp Unix explicados

Uma referência completa de todos os formatos de timestamp Unix — segundos, milissegundos, microssegundos, ISO 8601 e RFC 2822 — com exemplos que mostram que formato cada linguagem e base de dados usa, e como distingui-los num relance.

Todos os formatos de timestamp Unix num relance

Um timestamp Unix é apenas um número, e o seu formato é na verdade apenas a sua unidade — com que finura conta desde 1 de janeiro de 1970 UTC. A unidade quase sempre se lê pelo número de dígitos: 10 dígitos são segundos, 13 são milissegundos, 16 são microssegundos, 19 são nanossegundos. Os dois formatos de cadeia, ISO 8601 e RFC 2822, são em vez disso autodescritivos. A tabela abaixo é todo o panorama; as secções seguintes cobrem cada formato e como distingui-los.

FormatoDígitosExemploUsado por
Segundos101700000000Python, PHP, Go, Ruby, C, SQL
Milissegundos131700000000000JavaScript, Java, .NET
Microssegundos161700000000000000PostgreSQL, Rust
Nanossegundos191700000000000000000Go UnixNano, sistemas de tracing
ISO 8601cadeia2023-11-15T06:13:20ZAPI, logs (autodescritivo)
RFC 2822cadeiaWed, 15 Nov 2023 06:13:20 GMTE-mail, cabeçalhos HTTP

O tempo Unix em segundos — o formato universal

O formato mais comum: um inteiro de 32 ou 64 bits que conta o número de segundos inteiros desde 1 de janeiro de 1970 00:00:00 UTC. Atualmente um número de 10 dígitos à volta de 1,7 mil milhões.

  • Exemplo: 1700000000 = 2023-11-15 06:13:20 UTC
  • Usado por: Python time.time(), PHP time(), Go time.Now().Unix(), Ruby Time.now.to_i, C time(NULL)
  • Armazenado como: int de 32 bits (legado, ano máx. 2038), int de 64 bits (moderno, seguro por milhares de milhões de anos)
  • Base de dados: MySQL UNIX_TIMESTAMP(), PostgreSQL EXTRACT(EPOCH FROM NOW())::BIGINT

O tempo Unix em milissegundos — o formato do JavaScript

Milissegundos desde o epoch Unix: um inteiro de 13 dígitos que fornece precisão de milissegundos. É o formato que o objeto Date do JavaScript usa internamente.

  • Exemplo: 1700000000000 = 2023-11-15 06:13:20.000 UTC
  • Usado por: JavaScript Date.now(), Java System.currentTimeMillis(), .NET DateTimeOffset.UtcNow.ToUnixTimeMilliseconds()
  • Converter para segundos: Math.floor(ms / 1000)
  • Converter a partir de segundos: seconds * 1000

ISO 8601 — o padrão legível por humanos

O ISO 8601 é um padrão internacional para representar datas e horas como cadeias. Ao contrário dos timestamps Unix, é autodescritivo: o formato codifica tanto a data/hora como o deslocamento de fuso.

  • 2023-11-15T06:13:20Z — UTC (o sufixo Z significa UTC)
  • 2023-11-15T01:13:20-05:00 — com deslocamento UTC explícito (EST)
  • 2023-11-15T06:13:20.000Z — com milissegundos
  • JavaScript: date.toISOString() devolve sempre UTC com sufixo Z
  • Python: datetime.isoformat(), Go: time.Format(time.RFC3339)

RFC 2822 — formato de data de e-mail e HTTP

O RFC 2822 (atualizado pelo RFC 5322 para o e-mail, e espelhado pelo RFC 9110 para HTTP) é o formato de data legível usado nos cabeçalhos de e-mail e nas respostas HTTP. O Date.toUTCString() do JavaScript devolve este formato.

  • Exemplo: Wed, 15 Nov 2023 06:13:20 GMT
  • Usado em: cabeçalhos de resposta HTTP (Last-Modified, Date, Expires), cabeçalhos de e-mail (Date:)
  • JavaScript: date.toUTCString()
  • Menos comum nas API modernas mas ainda muito encontrado na infraestrutura web

Como detetar o formato do timestamp

Quando recebes um valor de timestamp desconhecido, estas regras identificam o seu formato. O número de dígitos resolve cada caso numérico; os dois formatos de cadeia são óbvios à vista.

PistaFormato
10 dígitosSegundos Unix
13 dígitosMilissegundos Unix
16 dígitosMicrossegundos
19 dígitosNanossegundos
Contém T ou ZISO 8601
Vírgula ou nome de diaRFC 2822
Inteiro negativoSegundos ou milissegundos anteriores a 1970
  • Verificação de bom senso: qualquer valor numérico deve descodificar numa data credível da era atual (cerca de 2001–2038 para segundos de 10 dígitos)
  • Uma data perto de 1970 ou a milhares de anos significa que a unidade foi lida errada

Microssegundos e nanossegundos

Alguns sistemas de alta precisão usam unidades menores que o milissegundo. São raras no código de aplicação mas aparecem em sistemas de baixo nível, internos de bases de dados e ferramentas de observabilidade.

  • Microssegundos (µs): inteiro de 16 dígitos — Rust SystemTime as_micros(), PostgreSQL clock_gettime()
  • Nanossegundos (ns): inteiro de 19 dígitos — Go time.Now().UnixNano(), Rust SystemTime as_nanos()
  • PostgreSQL EXTRACT(EPOCH) devolve um número de vírgula flutuante com os microssegundos como parte fracionária
  • Converter nanossegundos para segundos: dividir por 1.000.000.000 (1e9)

Resolução e precisão de frações de segundo

Cada formato acima traz uma resolução temporal diferente. Escolher um formato é escolher com que finura consegues distinguir dois momentos — de um segundo até um nanossegundo.

  • Resolução de 1 segundo: segundos Unix (10 dígitos), POSIX time_t tradicional
  • 1 milissegundo: JavaScript Date, MongoDB BSON Date, Java Instant.toEpochMilli()
  • 1 microssegundo: timestamps Chrome/WebKit, Python datetime.timestamp(), PostgreSQL timestamp precision 6
  • 100 nanossegundos: Windows FILETIME, .NET DateTime.Ticks
  • 1 nanossegundo: Java Instant (precisão completa), Go time.UnixNano(), JS Temporal.Instant.epochNanoseconds (BigInt)
  • Picossegundo e abaixo: formato de fio PTP/IEEE 1588 (1/2^32 de segundo), campo de fração do NTP
  • Escolhe a resolução mais grosseira que satisfaça as tuas necessidades — a precisão de subsegundo perde-se muitas vezes na serialização JSON ou no round-trip de cadeia
  • Ao converter entre formatos, passa por milissegundos ou nanossegundos Unix (via BigInt) — é o mínimo denominador comum que preserva a precisão

Conversores de formato de timestamp

Converte entre o tempo Unix e os formatos de timestamp específicos de plataforma que encontras na prática:

FAQ

Quantos dígitos tem um timestamp Unix?
Um timestamp Unix moderno em segundos tem 10 dígitos (cerca de 1,7 mil milhões); em milissegundos tem 13 dígitos. Os microssegundos têm 16 dígitos e os nanossegundos 19 dígitos.
Que formato de timestamp o JavaScript usa?
O Date do JavaScript trabalha em milissegundos — Date.now() devolve um timestamp de 13 dígitos em milissegundos, e new Date(ms) espera milissegundos. Multiplica os segundos Unix por 1000 antes de os passar ao Date.
Qual é a diferença entre o tempo Unix e o ISO 8601?
O tempo Unix é um único número de segundos ou milissegundos desde 1970 UTC e não traz fuso horário. O ISO 8601 é uma cadeia autodescritiva como 2023-11-15T06:13:20Z que codifica a data, a hora e o deslocamento.
O que é o formato de data RFC 2822?
O RFC 2822 (atualizado pelo RFC 5322) é o formato de data legível usado no e-mail e nos cabeçalhos HTTP, como "Wed, 15 Nov 2023 06:13:20 GMT". O JavaScript produ-lo com date.toUTCString().
Como deteto se um timestamp está em segundos ou em milissegundos?
Conta os dígitos: um valor de 10 dígitos está em segundos, um de 13 dígitos está em milissegundos. Se um valor se converter numa data perto de 1970 ou longe no futuro, a unidade foi lida errada.