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:
| Formato | Unidade | Exemplo |
|---|---|---|
| Unix (POSIX) | Segundos | 1711929600 |
JavaScript Date.now() | Milissegundos | 1711929600000 |
Python time.time() | Segundos (float) | 1711929600.123 |
| Timestamps em bases de dados | Frequentemente microssegundos | 1711929600000000 |
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 minuto | 60 |
| 1 hora | 3.600 |
| 1 dia | 86.400 |
| 1 semana | 604.800 |
| 30 dias | 2.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.