FAQ sobre timestamps Unix
Respostas rápidas às perguntas mais comuns sobre timestamps Unix — unidades, tratamento de fusos, o problema do ano 2038, conversões específicas de cada linguagem e mais.
Perguntas frequentes
- O que é um timestamp Unix?
- Um timestamp Unix é o número de segundos decorridos desde o epoch Unix — 1 de janeiro de 1970 às 00:00:00 UTC. É um inteiro neutro em relação à linguagem e independente de fuso que identifica de forma única qualquer momento no tempo.
- O que é o epoch Unix?
- O epoch Unix é 1 de janeiro de 1970 às 00:00:00 UTC. Todos os timestamps Unix são medidos para frente — ou para trás, no caso de valores negativos — a partir desse ponto de referência fixo. A escolha de 1970 foi prática: era um ano recente e redondo quando o Unix estava sendo projetado na Bell Labs.
- Qual é a diferença entre um timestamp de 10 e de 13 dígitos?
- Um timestamp de 10 dígitos (ex.: 1700000000) representa segundos desde o epoch. Um de 13 dígitos (ex.: 1700000000000) representa milissegundos. O Date.now() do JavaScript retorna milissegundos; a maioria das chamadas de sistema Unix e linguagens como Python, Go e PHP retorna segundos por padrão.
- Por que o JavaScript usa milissegundos em vez de segundos?
- A API Date do JavaScript foi projetada para corresponder à resolução dos temporizadores de sistema disponíveis em 1995. Usar milissegundos evita perda de precisão para durações abaixo de um segundo. Ao trabalhar com timestamps Unix em segundos gerados pelo servidor, multiplique por 1000 antes de passá-los a new Date().
- Como converto um timestamp Unix em uma data legível no JavaScript?
- Para um timestamp em segundos: new Date(1700000000 * 1000).toISOString(). Para um em milissegundos: new Date(1700000000000).toISOString(). Ambos produzem strings ISO 8601 como '2023-11-15T06:13:20.000Z'. Use toLocaleString() com uma opção timeZone para exibição localizada.
- Os timestamps Unix são cientes de fuso horário?
- Não. Um timestamp Unix sempre representa um único momento em UTC. A informação de fuso só é aplicada ao formatar o timestamp para exibição. Dois dispositivos em fusos diferentes produzirão o mesmo timestamp Unix para o mesmo instante.
- O que é o problema do ano 2038?
- Sistemas que armazenam timestamps Unix como inteiros com sinal de 32 bits só conseguem representar valores até 2.147.483.647, que corresponde a 19 de janeiro de 2038 às 03:14:07 UTC. Após esse momento o inteiro transborda para um número negativo grande. Sistemas modernos de 64 bits não são afetados, mas sistemas embarcados e bancos de dados legados ainda podem estar em risco.
- O que é um timestamp Unix negativo?
- Um timestamp Unix negativo representa um momento anterior ao epoch Unix. Por exemplo, -86400 é 31 de dezembro de 1969 às 00:00:00 UTC. A maioria das APIs de data modernas trata timestamps negativos corretamente, mas alguns sistemas e bancos de dados mais antigos não os suportam.
- Como obtenho um timestamp Unix em Python?
- Use import time; int(time.time()) para segundos. Para um datetime UTC explícito: import datetime; int(datetime.datetime.now(datetime.timezone.utc).timestamp()). Para milissegundos: int(time.time() * 1000).
- Qual é a precisão de um timestamp Unix?
- Um timestamp Unix padrão tem precisão de um segundo. Para precisão abaixo de um segundo, timestamps em milissegundos (13 dígitos) são comuns em APIs web e no JavaScript. Alguns sistemas usam microssegundos (16 dígitos) ou nanossegundos. A unidade adequada depende da precisão de que sua aplicação realmente precisa.