ENPT

Valores de tempo Unix (o epoch)

O tempo Unix (muitas vezes chamado de “o epoch”) é uma forma simples de representar um ponto no tempo: o número de segundos decorridos desde 1970-01-01 00:00:00 UTC, sem contar os segundos bissextos. É compacto, independente de linguagem e fácil de comparar e ordenar.

xkcd 376: Bug

Quadrinho: xkcd #376 — usado sob a Licença Creative Commons Atribuição-NãoComercial 2.5. Crédito: Randall Munroe / xkcd.

TL;DR
  • O tempo Unix é o número de segundos decorridos desde 1970-01-01 00:00:00 UTC, normalmente armazenado como um inteiro de 64 bits.
  • Use-o para armazenamento interno, comparações, rate limiting, TTLs e formatos binários compactos.
  • Não o use para exibição, lógica de calendário/fuso horário ou intervalos decorridos precisos — use timestamps legíveis por humanos (ISO 8601) e relógios monotônicos.
  • Use sempre inteiros de 64 bits; 32 bits estouram em 2038.

Exemplos rápidos

  • Shell: date +%s imprime o tempo Unix atual em segundos.
  • Python: import time; int(time.time()) — segundos, ou time.time() para segundos fracionários.
  • JavaScript: Math.floor(Date.now() / 1000) — Date.now() retorna milissegundos.

Quando você deve usar o tempo Unix

  • Timestamps de máquina para máquina: compacto, rápido de comparar e bem suportado entre plataformas.
  • Bancos de dados e índices onde você só precisa de ordenação cronológica ou durações.
  • Protocolos ou formatos binários que precisam de uma representação numérica compacta e independente de fuso horário.
  • Logs ou métricas de curta duração, onde espaço e velocidade de parsing importam.

Regra prática: use o tempo Unix para armazenamento interno e cálculos (ordenação, rate limiting, TTLs), especialmente quando você também armazena o fuso horário ou uma representação canônica em outro lugar.

Quando você não deve usar o tempo Unix

  • Para exibir datas a humanos — não é legível e depende de conversão de fuso horário.
  • Para registros legais/de auditoria, onde se espera um timestamp legível por humanos e inequívoco (ISO 8601 / RFC 3339).
  • Quando você precisa expressar conceitos de calendário (meia-noite local, dias úteis, eventos recorrentes) — esses exigem bibliotecas cientes de calendário.
  • Para medir intervalos decorridos precisos na presença de mudanças no relógio do sistema — use um relógio monotônico (por exemplo, clock_gettime(CLOCK_MONOTONIC) / time.monotonic() no Python).

Pegadinhas e dicas

  • Segundos bissextos: o tempo Unix normalmente os ignora. Se você precisa considerá-los explicitamente, o tempo Unix pode ser a primitiva errada.
  • Ano 2038: inteiros com sinal de 32 bits estouram para o tempo Unix baseado em segundos. Use inteiros de 64 bits para armazenamento de longo prazo.
  • Precisão: se você precisa de precisão abaixo de um segundo, armazene segundos fracionários (floats) ou campos separados de nanossegundos.
  • Sempre registre o fuso horário ou armazene uma string ISO 8601 quando também importa como esse instante foi apresentado a um usuário.

Padrão recomendado

  1. Para logs e APIs: prefira timestamps formatados em ISO 8601 / RFC 3339 (por exemplo, 2025-10-16T12:00:00Z) para legibilidade humana e interoperabilidade.
  2. Para cálculos internos e armazenamento compacto: mantenha um epoch Unix em segundos ou milissegundos (com um contrato claro — segundos vs ms vs ns). Use inteiros de 64 bits para durabilidade.
  3. Para durações ou tempo decorrido: use relógios monotônicos em vez do tempo Unix do relógio de parede.

Conclusão

O tempo Unix é uma ferramenta simples e prática — ótima para comparações, eficiência de armazenamento e interoperabilidade — mas não é uma solução única para tudo. Combine-o com timestamps legíveis por humanos e informações de fuso horário quando precisar de clareza, e prefira relógios monotônicos para medir intervalos.

Bons timestamps!