Como converter Timestamp Unix para datas humanas — e por que servidores usam esse formato
O Unix Timestamp (também chamado de Epoch Time ou POSIX Time) é a forma como a grande maioria dos servidores, bancos de dados e linguagens de programação armazenam e manipulam datas internamente. Ele representa o número de segundos (ou milissegundos) decorridos desde a meia-noite de 1º de janeiro de 1970, UTC — o "Epoch" (época de referência). Por que 1970? Foi quando o Unix, precursor de todos os sistemas operacionais modernos, foi criado.
Tabela de referência: Timestamps Unix marcantes
| Unix Timestamp |
Data/Hora (UTC) |
Significado |
| 0 |
01/01/1970 00:00:00 |
O Epoch — origem do tempo Unix |
| 1000000000 |
09/09/2001 01:46:40 |
1 bilhão de segundos Unix |
| 1234567890 |
13/02/2009 23:31:30 |
1.234.567.890 — sequência curiosa |
| 1700000000 |
14/11/2023 22:13:20 |
Recente referência de log |
| 2147483647 |
19/01/2038 03:14:07 |
Bug Y2K38 — limite do int32 |
| 4102444800 |
01/01/2100 00:00:00 |
Próximo "Y2K" do planejamento |
Por que bancos de dados usam timestamp e não strings de data
Armazenar datas como strings ("2024-05-20 10:30:00") parece mais legível, mas cria problemas: strings não são indexadas eficientemente, comparações e ordenações são inconsistentes entre fusos horários, e o armazenamento é maior. Um Unix timestamp é um simples inteiro de 64 bits — ocupa 8 bytes, é indexado com máxima eficiência, ordena corretamente com ORDER BY e é universalmente portável entre sistemas operacionais e linguagens.
Perguntas frequentes — Timestamp Unix
Como obter o timestamp atual em JavaScript?▼
Date.now() retorna milissegundos: ex 1716239022000. Para segundos: Math.floor(Date.now()/1000). Também: new Date().getTime() ou +new Date().
Como obter o timestamp atual em Python?▼
import time; time.time() retorna float em segundos. Para inteiro: int(time.time()). Para milissegundos: int(time.time()*1000). Com datetime: from datetime import datetime, timezone; int(datetime.now(timezone.utc).timestamp()).
O que é o Bug Y2K38?▼
Em sistemas que armazenam timestamp como inteiro de 32 bits com sinal, o valor máximo é 2.147.483.647 (01/01/2038). Após esse ponto, o contador transborda para negativo. Sistemas modernos usam int64 (64 bits), que aguenta até o ano 292 bilhões — não é problema prático.
Como converter timestamp para fuso horário do Brasil?▼
O Unix timestamp é sempre UTC. Para converter para Brasília (UTC-3): no JavaScript, new Date(ts*1000).toLocaleString("pt-BR", {timeZone:"America/Sao_Paulo"}). No SQL: CONVERT_TZ(FROM_UNIXTIME(ts), "+00:00", "-03:00") no MySQL.
Qual a diferença entre Unix timestamp em segundos e milissegundos?▼
APIs e bancos mais antigos (Unix, PHP, Python, MySQL) usam segundos. JavaScript, Java e muitas APIs REST modernas usam milissegundos. Se um timestamp parecer enorme (ex: 1716239022000), provavelmente está em milissegundos — divida por 1000 para obter segundos.
Como formatar um timestamp em SQL?▼
MySQL: DATE_FORMAT(FROM_UNIXTIME(ts), "%d/%m/%Y %H:%i"); PostgreSQL: to_char(to_timestamp(ts), "DD/MM/YYYY HH24:MI"); SQLite: datetime(ts, "unixepoch", "localtime").
Como calcular a diferença entre dois timestamps?▼
Subtraia os timestamps em segundos: diff = ts2 - ts1. O resultado é a diferença em segundos. Para dias: Math.floor(diff/86400). Para horas: Math.floor(diff/3600). Para minutos: Math.floor((diff%3600)/60).
Por que APIs às vezes retornam datas em ISO 8601 em vez de timestamp?▼
ISO 8601 (ex: 2024-05-20T10:30:00Z) é legível por humanos e universalmente parseável. APIs REST tendem a preferir ISO 8601 nas respostas para melhor documentação e debugging. Internamente, o banco pode armazenar como timestamp para eficiência. Ambos são válidos — o importante é ser consistente.
Timestamp e LGPD: quando armazenar data de acesso é problema?▼
Logs com timestamp + IP + ação do usuário constituem dados pessoais pela LGPD. Você precisa de base legal para coletar (consentimento, segurança, interesse legítimo), deve definir prazo de retenção e incluir na política de privacidade. Logs de acesso por mais de 6 meses geralmente exigem justificativa.
Como usar timestamp para caching e invalidação de cache?▼
Armazene o timestamp de última modificação de um recurso. Compare com o cache do cliente via header If-Modified-Since ou ETags. Se o timestamp do servidor for maior que o do cache, entregue o novo conteúdo; caso contrário, retorne 304 Not Modified — economiza banda e melhora performance.