Milissegundos epoch para data: converter timestamps de 13 dígitos e valores long

Um guia para converter milissegundos epoch em datas legíveis. Cobre timestamps de 13 dígitos, Date do JavaScript, valores long do Java, milissegundos vs segundos e por que a unidade errada produz datas de 1970 ou muito distantes.

O que são os milissegundos epoch

Os milissegundos epoch contam os milissegundos desde 1 de janeiro de 1970 às 00:00:00 UTC. Usam o mesmo epoch Unix dos segundos Unix, mas com três dígitos a mais de precisão. Um valor moderno de milissegundos epoch geralmente tem 13 dígitos, como 1700000000000.

Como converter millis em data

Se o valor já estiver em milissegundos, o JavaScript Date pode lê-lo diretamente. Se a ferramenta receptora espera segundos, divida primeiro por 1000. O erro principal é multiplicar ou dividir no limite errado.

  • JavaScript: new Date(1700000000000).toISOString()
  • Milliseconds to seconds: Math.floor(1700000000000 / 1000)
  • Seconds to milliseconds: 1700000000 * 1000
  • Java Instant: Instant.ofEpochMilli(1700000000000L)
  • Python: datetime.fromtimestamp(ms / 1000, tz=timezone.utc)

Long para data em Java e bancos de dados

Buscas por «long para data» costumam vir de Java, Kotlin, Android ou exports de banco onde um timestamp é guardado como inteiro de 64 bits. O valor pode ser milissegundos epoch, mas também segundos, microssegundos ou nanossegundos. Verifique o número de dígitos antes de converter.

  • 10 dígitos: provavelmente segundos Unix
  • 13 dígitos: provavelmente milissegundos Unix ou long do Java em milissegundos
  • 16 dígitos: provavelmente microssegundos
  • 19 dígitos: provavelmente nanossegundos
  • Sempre nomeie colunas com a unidade, como created_at_ms

Por que milissegundos viram datas estranhas

Um valor em milissegundos tratado como segundos vira uma data muito distante no futuro. Um valor em segundos tratado como milissegundos vira uma data perto de janeiro de 1970. Os dígitos são o diagnóstico mais rápido.

  • 1700000000000 como milissegundos = 2023-11-14 22:13:20 UTC
  • 1700000000000 como segundos = por volta do ano 55840, dependendo da biblioteca
  • 1700000000 como segundos = 2023-11-14 22:13:20 UTC
  • 1700000000 como milissegundos = 1970-01-20 16:13:20 UTC

FAQ sobre milissegundos epoch

Tempo epoch em ms é o mesmo que timestamp Unix?
Usa o mesmo epoch, mas a unidade é milissegundos em vez de segundos. O timestamp Unix clássico geralmente significa segundos.
Quantos dígitos tem um timestamp em milissegundos epoch?
Para datas atuais, os milissegundos epoch geralmente têm 13 dígitos.
O JavaScript usa milissegundos ou segundos?
O JavaScript Date usa milissegundos. Date.now() retorna milissegundos epoch.
Como converto um timestamp long do Java em data?
Se o long está em milissegundos epoch, use Instant.ofEpochMilli(value); se está em segundos epoch, use Instant.ofEpochSecond(value). Verifique primeiro o número de dígitos: 13 = milissegundos, 10 = segundos.