Segundos ou milissegundos
Um timestamp Unix conta o tempo decorrido desde a meia-noite UTC de 1 de janeiro de 1970. O problema é que alguns sistemas contam em segundos e outros em milissegundos.
- Segundos — comandos Unix, funções de tempo do PostgreSQL e do MySQL, os campos
expeiatde um JWT, a maioria das APIs REST - Milissegundos —
Date.now()do JavaScript,System.currentTimeMillis()do Java, boa parte das esteiras de log
Trocar um pelo outro leva a janeiro de 1970 (milissegundos lidos como segundos) ou ao ano 50000 (segundos lidos como milissegundos). Esta ferramenta deduz a unidade pela magnitude e mostra como leu o número, então confira essa linha assim que uma data parecer estranha.
A armadilha do fuso
Um timestamp não tem fuso horário. É um único número que nomeia um instante; o fuso só entra quando esse número vira texto para uma pessoa. O mesmo valor aparece como 16h em São Paulo e 20h em Lisboa.
Por isso um relato de bug que diz “falhou às 15h” vem sem metade da informação. Registre timestamps ou strings ISO 8601 com deslocamento, e monte o horário legível apenas na hora de exibir.
O problema de 2038
Guardado num inteiro de 32 bits com sinal, um timestamp estoura em 19 de janeiro de 2038. Nesse instante o valor vira negativo e a data passa a 1901. Linguagens e bancos atuais usam 64 bits, mas se você mantém firmware embarcado antigo ou código C legado, vale conferir a largura desse campo.
Valores negativos e zero
Negativos apontam para datas anteriores a 1970. Aparecem sempre que datas antigas, como um nascimento, são guardadas assim — e algumas bibliotecas lidam mal com eles.
Zero é a meia-noite UTC de 1 de janeiro de 1970. Quando surge em dados reais quase nunca é um horário de verdade: é um campo que ninguém inicializou.