O que é um timestamp Unix (e por que os programadores o usam)?

Um timestamp Unix é um único inteiro: o número de segundos que se passaram desde 1 de janeiro de 1970, às 00:00:00 UTC. Esse momento é chamado de época Unix (Unix epoch), e cada segundo desde então foi contado sem interrupções.

O timestamp atual neste exato momento está algures por volta de 1.750.000.000. Só esse número já diz a qualquer computador, base de dados ou API exatamente que momento no tempo você quer dizer — sem ambiguidade.

Por que 1970?

O Unix foi desenvolvido no final da década de 1960 nos Bell Labs. Quando os engenheiros precisaram de um ponto fixo de referência para o tempo, escolheram 1 de janeiro de 1970 — o início de uma nova década, fácil de entender, e convenientemente no passado recente, para que as datas armazenadas não exigissem números negativos para nada prático na época.

Foi uma escolha pragmática, não uma escolha “de princípio”. E acabou ficando.

O problema que timestamps Unix resolvem

Representar datas como strings legíveis para humanos cria ambiguidade em todas as camadas:

  • Discordâncias de formato: 03/04/25 é 3 de abril ou 4 de março? É 1925 ou 2025?
  • Confusão de fuso horário: “sexta às 15h” significa momentos diferentes em Londres vs. Tóquio
  • Diferenças de locale: alguns países usam dia-mês-ano, outros mês-dia-ano

Um timestamp Unix contorna tudo isso. 1711929600 é um único momento no tempo, sem ambiguidades, independentemente de onde você esteja ou de que formato prefira. Máquinas concordam; humanos convertem.

Segundos, milissegundos e microssegundos

O timestamp Unix original está em segundos. Mas sistemas diferentes usam resoluções diferentes:

FormatoUnidadeExemplo
Unix (POSIX)Segundos1711929600
JavaScript Date.now()Milissegundos1711929600000
Python time.time()Segundos (float)1711929600.123
Timestamps em bases de dadosFrequentemente microssegundos1711929600000000

Esta é uma das fontes mais comuns de bugs ao trabalhar entre sistemas. Um timestamp de JavaScript passado diretamente para uma função em Python ou Go ficará 1.000× maior do que deveria. Verifique sempre a resolução ao atravessar limites entre sistemas.

Ler e escrever timestamps Unix

Em JavaScript / TypeScript

// Timestamp atual em segundos
Math.floor(Date.now() / 1000)

// Timestamp atual em milissegundos
Date.now()

// Converter timestamp (segundos) em objeto Date
new Date(timestamp * 1000)

// Converter Date em timestamp (segundos)
Math.floor(new Date('2024-04-01').getTime() / 1000)

Em Python

import time, datetime

# Timestamp atual (float)
time.time()

# Converter para datetime
datetime.datetime.fromtimestamp(1711929600)

# Converter datetime para timestamp
datetime.datetime(2024, 4, 1).timestamp()

Em SQL (PostgreSQL)

-- Timestamp atual
EXTRACT(EPOCH FROM NOW())::int

-- Converter para timestamp
TO_TIMESTAMP(1711929600)

Fusos horários não afetam o timestamp em si

Isto é importante e muitas vezes é mal compreendido.

Um timestamp Unix representa sempre um momento em UTC. Quando você mostra esse valor, converte para um fuso horário local. Quando você armazena, armazena o valor em UTC. O timestamp em si é neutro em relação a fuso horário.

Isto significa:

  • dois utilizadores em fusos diferentes ao armazenar “agora” obtêm o mesmo timestamp
  • ao exibir, cada utilizador vê no seu fuso local
  • não são necessários ajustes de offset na base de dados — apenas na camada de apresentação

O problema do ano 2038

Timestamps Unix armazenados como inteiro assinado de 32 bits só conseguem contar até 2.147.483.647 segundos — o que corresponde a 19 de janeiro de 2038, às 03:14:07 UTC. Depois disso, um contador de 32 bits “dá a volta” e passa a um grande número negativo.

Sistemas que ainda armazenam timestamps como inteiros de 32 bits vão falhar nessa data. A maioria dos sistemas modernos usa inteiros de 64 bits, o que empurra o overflow para o ano 292 mil milhões — irrelevante na prática.

Se você trabalha com sistemas embebidos, bases de dados legadas ou código C antigo, vale a pena verificar como os timestamps são armazenados.

Quando usar um timestamp Unix

Use um timestamp Unix quando:

  • armazenar datas numa base de dados e quiser um inteiro simples e ordenável
  • passar datas entre sistemas ou APIs
  • comparar ou ordenar eventos cronologicamente
  • calcular durações (basta subtrair dois timestamps)
  • trabalhar com cache ou lógica de expiração (expires_at = now + 3600)

Use uma string de data formatada quando:

  • mostrar uma data ao utilizador
  • registar eventos em logs legíveis por humanos
  • trabalhar com folhas de cálculo ou exportações CSV

Conversões rápidas

O quêSegundos
1 minuto60
1 hora3.600
1 dia86.400
1 semana604.800
30 dias2.592.000
1 ano (aprox.)31.536.000

O Conversor de timestamp Unix converte qualquer timestamp em uma data legível para humanos ou converte uma data para timestamp Unix instantaneamente.