O idioma universal das datas
Formatos de data humanos brigam entre si — 07/01/2026 é 7 de janeiro no Brasil e 1º de julho nos Estados Unidos. O timestamp resolve isso na raiz: um número único, sem fuso, sem separador, sem ambiguidade, contando os segundos passados desde 1º de janeiro de 1970 às 00:00 UTC. Bancos de dados, logs de servidor, tokens JWT (campos iat e exp) e praticamente toda API falam epoch por baixo dos panos.
A grande vantagem prática vem da aritmética: subtrair dois timestamps dá a diferença em segundos, direto, sem se preocupar com meses de tamanhos diferentes, ano bissexto ou virada de ano. "Quanto tempo esse pedido ficou parado?" é uma subtração, e não um algoritmo de calendário.
Como usar os dois campos
- Timestamp → Data: cole o número cru do log, do banco ou do JWT. A ferramenta identifica se são segundos ou milissegundos, mostra qual interpretação usou e devolve a data por extenso no seu fuso e também em UTC.
- Data → Timestamp: escolha data e hora no seletor e receba o valor em segundos, em milissegundos e no formato ISO 8601 — os três que APIs costumam pedir.
- Timestamp atual: o número no topo avança a cada segundo e copia com um clique, útil para preencher um campo de teste rapidamente.
Segundos, milissegundos e o resto
A confusão mais frequente é de escala. O padrão Unix conta em segundos, mas cada ecossistema escolheu a sua unidade, e o número de dígitos entrega qual é:
| Dígitos | Unidade | Exemplo | Onde aparece |
|---|---|---|---|
| 10 | Segundos | 1700000000 | Unix, PHP, MySQL, JWT, APIs REST |
| 13 | Milissegundos | 1700000000000 | JavaScript, Java, Kotlin, Android |
| 16 | Microssegundos | 1700000000000000 | PostgreSQL interno, Python |
| 19 | Nanossegundos | 1700000000000000000 | Go, métricas de observabilidade |
O sintoma clássico de errar a escala: a data cai em 1º de janeiro de 1970 (você passou segundos onde se esperava milissegundos) ou salta para o ano 55.000 (o contrário). Se aparecer uma dessas duas, é escala, não bug.
Marcos para conferir de olho
Guardar dois ou três pontos de referência permite avaliar um timestamp sem converter: se o número começa com 17, é 2023 ou 2024; começando com 18, já é 2027 em diante.
| Timestamp | Data em UTC |
|---|---|
| 0 | 01/01/1970 00:00:00 — o epoch |
| 1000000000 | 09/09/2001 01:46:40 |
| 1234567890 | 13/02/2009 23:31:30 |
| 1500000000 | 14/07/2017 02:40:00 |
| 1700000000 | 14/11/2023 22:13:20 |
| 2000000000 | 18/05/2033 03:33:20 |
| 2147483647 | 19/01/2038 03:14:07 — o limite dos 32 bits |
As durações em segundos também compensam decorar: 60 é um minuto, 3.600 uma hora, 86.400 um dia, 604.800 uma semana, 2.592.000 trinta dias e 31.536.000 um ano de 365 dias. Um token com exp 3.600 segundos à frente do iat vale uma hora.
Fuso horário: onde o Brasil entra na conta
O timestamp em si não tem fuso — ele é contado em UTC. O fuso aparece só na hora de exibir, e é aí que nascem as discussões de "o log está com a hora errada". Brasília trabalha em UTC−3, então 15:00 UTC é 12:00 em Brasília.
| Região | Diferença para o UTC | Exemplo: 15:00 UTC |
|---|---|---|
| Brasília, São Paulo, Salvador, Belém | UTC−3 | 12:00 |
| Manaus, Cuiabá, Porto Velho, Boa Vista | UTC−4 | 11:00 |
| Rio Branco e oeste do Amazonas | UTC−5 | 10:00 |
| Fernando de Noronha | UTC−2 | 13:00 |
Detalhe que quebra relatório antigo: o horário de verão brasileiro foi extinto em 2019. Datas de verão anteriores a essa mudança no Sudeste, no Sul e no Centro-Oeste convertem com UTC−2, não com UTC−3 — uma diferença de uma hora que só aparece em dados históricos.
Casos práticos
- Debug de JWT: o token expirou de verdade ou o relógio do servidor está adiantado? Cole o
expaqui e compare com o timestamp atual mostrado no topo da página. - Logs de servidor: aquela linha de erro com 1784476800 vira data legível na hora, sem abrir terminal.
- Agendamentos e cron: APIs de agendamento, filas com entrega programada e webhooks com repetição pedem epoch — monte a data no segundo campo e copie o número.
- Cookies e cache: os cabeçalhos
Expiresemax-agetrabalham em segundos; conferir se o cache expira em uma hora ou em um ano é questão de converter. - Conciliação entre sistemas: quando o ERP registra em horário local e o gateway em UTC, converter os dois para epoch é a forma de descobrir se a diferença é de fuso ou de fato.
- Migração de banco: conferir uma amostra de datas antes e depois evita descobrir tarde demais que a coluna inteira andou três horas.
Erros comuns com epoch
- Somar ou subtrair o fuso no próprio número. Tirar 10.800 segundos "para deixar em horário de Brasília" corrompe o dado: o timestamp deixa de apontar o instante correto. O ajuste de fuso pertence à camada de exibição.
- Guardar data local sem registrar o fuso. "15/03/2026 08:00" sem indicação de fuso é ambíguo para qualquer sistema que rode em outro servidor.
- Contar com segundos bissextos. O tempo Unix ignora os segundos bissextos: todo dia tem exatamente 86.400 segundos por definição. Para quase toda aplicação isso é uma boa notícia, mas sistemas de medição científica precisam de outra escala.
- Usar inteiro de 32 bits. Colunas
INTcom epoch estouram em 19/01/2038. Contratos, financiamentos e vencimentos de longo prazo já esbarram nisso hoje — useBIGINTou um tipo nativo de data e hora. - Assumir que epoch é sempre positivo. Datas anteriores a 1970 são negativas, e muitas bibliotecas antigas simplesmente devolvem lixo nesse intervalo.
- Comparar strings de data em vez de timestamps. "10/03" e "09/12" comparados como texto dão resultado errado; como número, nunca.
Como obter o timestamp em cada ferramenta
| Ferramenta | Timestamp atual | Converter para data |
|---|---|---|
| JavaScript | Math.floor(Date.now()/1000) | new Date(ts*1000) |
| Python | int(time.time()) | datetime.fromtimestamp(ts) |
| PHP | time() | date('d/m/Y H:i', $ts) |
| MySQL | UNIX_TIMESTAMP() | FROM_UNIXTIME(ts) |
| PostgreSQL | extract(epoch from now()) | to_timestamp(ts) |
| Linux e macOS | date +%s | date -r ts |
| Excel | — | =A1/86400+25569 |
A fórmula do Excel merece explicação: 86.400 é o número de segundos de um dia e 25.569 é a distância em dias entre a data zero da planilha (30/12/1899) e o epoch de 1970. O resultado sai em UTC — para o horário de Brasília, subtraia 3/24 e formate a célula como data e hora.
Perguntas frequentes
O que é um timestamp Unix?
É o número de segundos decorridos desde 1º de janeiro de 1970 às 00:00 UTC (o "epoch"). É o formato universal de data em bancos de dados, logs e APIs.
Como saber se o timestamp está em segundos ou milissegundos?
Pelo tamanho: 10 dígitos = segundos, 13 dígitos = milissegundos. Esta ferramenta detecta automaticamente e mostra os dois.
O que acontece em 2038?
Sistemas antigos que guardam o timestamp em inteiro de 32 bits estouram em 19/01/2038. Sistemas modernos usam 64 bits e estão tranquilos por 292 bilhões de anos.
Qual é o fuso do Brasil em relação ao timestamp?
O timestamp não tem fuso: ele conta segundos em UTC. Brasília está em UTC−3, então uma data mostrada como 12h em Brasília corresponde a 15h UTC. O país tem ainda UTC−4 (Amazonas, Mato Grosso, Rondônia, Roraima), UTC−5 (Acre e o oeste do Amazonas) e UTC−2 em Fernando de Noronha.
O timestamp muda com o horário de verão?
Não. O timestamp é sempre contado em UTC, que não tem horário de verão — o que muda é apenas a conversão para a hora local. No Brasil o horário de verão foi extinto em 2019, então datas anteriores a 2019 no verão do Sudeste e do Sul convertem com UTC−2, e não com UTC−3.
Timestamp pode ser negativo?
Sim: valores negativos representam datas anteriores a 1º de janeiro de 1970. Uma pessoa nascida em 1965 tem timestamp de nascimento negativo. O padrão aceita isso, mas muitos sistemas e bancos de dados rejeitam ou calculam errado — por isso datas de nascimento costumam ser guardadas como DATE, e não como epoch.
Como converter timestamp Unix no Excel?
Use =A1/86400+25569 e formate a célula como data e hora. O 86400 é o número de segundos de um dia e o 25569 é a diferença em dias entre a data zero do Excel (30/12/1899) e o epoch de 1970. O resultado sai em UTC; para o horário de Brasília, subtraia 3/24.
Por que a data convertida aparece diferente para mim e para o meu colega?
Porque a linha "local" usa o fuso configurado em cada computador. O mesmo timestamp visto em Brasília e em Rio Branco mostra horas diferentes, ainda que seja exatamente o mesmo instante. Ao comparar registros entre times ou servidores, use sempre a linha UTC.