Como Converter Entre Formatos de Hora
Os formatos de hora variam entre sistemas, APIs e países. Timestamps Unix em respostas de APIs, ISO 8601 em bancos de dados, formato 12h nos EUA, formato 24h na Europa — converter entre eles é uma necessidade constante para desenvolvedores e qualquer pessoa que trabalha com dados internacionais.
Formatos comuns de hora
| Formato | Exemplo | Usado por |
|---|---|---|
| Timestamp Unix (segundos) | 1712502600 | APIs, bancos de dados, tokens JWT |
| Timestamp Unix (ms) | 1712502600000 | JavaScript, Java |
| ISO 8601 | 2026-04-07T14:30:00Z | APIs JSON, bancos de dados, logs |
| RFC 2822 | Mon, 07 Apr 2026 14:30:00 +0000 | Cabeçalhos de e-mail, HTTP |
| 24 horas | 14:30 | Europa, militar, aviação |
| 12 horas | 2:30 PM | EUA, uso casual |
Referência rápida de conversão
12 horas para 24 horas
| 12 horas | 24 horas |
|---|---|
| 12:00 AM (meia-noite) | 00:00 |
| 1:00 AM | 01:00 |
| 12:00 PM (meio-dia) | 12:00 |
| 1:00 PM | 13:00 |
| 6:00 PM | 18:00 |
| 11:59 PM | 23:59 |
Timestamps para datas
Use o conversor de época para traduzir timestamps Unix em datas legíveis instantaneamente, e vice-versa. O conversor lida com os formatos em segundos e milissegundos automaticamente.
Exemplos de conversão em código
A maioria dos desenvolvedores acaba precisando converter timestamps em código. As APIs principais são curtas:
- JavaScript —
new Date(1712502600 * 1000).toISOString()retorna2024-04-07T14:30:00.000Z. Lembre-se de multiplicar por 1000, porque oDatedo JavaScript espera milissegundos. - Python —
datetime.utcfromtimestamp(1712502600).isoformat()retorna2024-04-07T14:30:00. Usedatetime.fromtimestamp(ts, tz=timezone.utc)para objetos com fuso horário. - Shell —
date -u -d @1712502600 +"%Y-%m-%dT%H:%M:%SZ"no Linux, oudate -u -r 1712502600 +"%Y-%m-%dT%H:%M:%SZ"no macOS.
Armadilhas comuns a evitar
- Esquecer o fuso horário — "2026-04-07 14:30" é ambíguo sem um fuso. Sempre inclua
Zou um deslocamento+00:00ao armazenar strings ISO. - Misturar segundos e milissegundos — um timestamp de 10 dígitos está em segundos; um de 13 dígitos, em milissegundos. Misturar os dois produz datas em 1970 ou lá no futuro.
- Depender da hora local no servidor — se seu servidor está em UTC e seu usuário em Tóquio, armazene em UTC e converta apenas na exibição. Deixar o servidor inferir o local quase sempre causa bugs quando os usuários viajam ou o horário de verão muda.
- Fazer parse com manipulação de string — não recorte e concatene strings de data. Use
Date.parse(),dateutil.parserou uma biblioteca dedicada.
Dicas
- Use ISO 8601 ao trocar dados — é inequívoco, ordena corretamente como string e é o padrão para APIs JSON.
- Armazene horas em UTC — converta para a hora local apenas na exibição. Isso evita bugs de fuso horário quando os usuários estão em regiões diferentes.
- Lembre que o JavaScript usa milissegundos —
Date.now()retorna milissegundos, não segundos. Divida por 1000 para obter um timestamp Unix padrão. - Guarde o conversor nos favoritos — se você trabalha com APIs ou logs, converter timestamps é algo que você fará com frequência.
Perguntas frequentes
O que é o formato ISO 8601?
ISO 8601 é o padrão internacional de representação de data e hora. Tem a aparência 2026-04-07T14:30:00Z, onde o T separa data e hora, e o Z indica UTC. É inequívoco em qualquer região.
Por que as APIs usam timestamps Unix em vez de datas legíveis?
Os timestamps Unix são um único número, o que os torna fáceis de armazenar, ordenar e comparar. São neutros em relação ao fuso (sempre UTC) e ocupam menos espaço que strings formatadas de data. A desvantagem é que não são legíveis por humanos.
O que significa o Z no final de um timestamp?
O Z representa "hora Zulu", que é outro nome para UTC (Tempo Universal Coordenado). Um timestamp terminando em Z está em UTC, não no horário local.
Como converto 24 horas para 12 horas?
Para horas de 1 a 12, a hora continua igual (adicione AM para 0-11, PM para 12). Para horas de 13 a 23, subtraia 12 e adicione PM. 00:00 é 12:00 AM (meia-noite). 12:00 é 12:00 PM (meio-dia).