Conversor de timestamp Unix

RSS

Veja o horário Unix atual em tempo real, converta segundos ou milissegundos epoch em uma data legível ou transforme uma data em timestamp.

Funciona 100% no seu navegador. Nada do que você cola é enviado ou armazenado.

Horário Unix atual

—

Timestamp → data

Data → timestamp

Como usar o conversor de timestamp Unix

  1. Cole um timestamp Unix. O conversor reconhece se ele está em segundos ou em milissegundos.
  2. Veja a data em UTC, no seu fuso horário local e no formato ISO 8601.
  3. Para fazer o caminho inverso, escolha uma data e um horário e copie o timestamp gerado.

As conversões são calculadas no seu navegador com o relógio e as configurações de fuso horário do seu dispositivo; nada é enviado nem armazenado em servidor.

O que é um timestamp Unix?

Um timestamp Unix (também chamado de epoch time ou tempo POSIX) é o número de segundos que se passaram desde a época Unix: 1970-01-01T00:00:00Z, meia-noite UTC de 1º de janeiro de 1970. Datas anteriores à época são números negativos.

Os timestamps são populares porque são um único número inteiro, independente de fusos horários e do horário de verão, fácil de comparar e ordenar e compacto para armazenar. A conversão para o horário local é uma questão de exibição, resolvida no último momento.

1700000000      → 2023-11-14T22:13:20Z
0               → 1970-01-01T00:00:00Z
-86400          → 1969-12-31T00:00:00Z

Segundos x milissegundos

As ferramentas Unix, o PHP, o time.time() do Python e a maioria dos bancos de dados usam segundos. O Date.now() do JavaScript, o System.currentTimeMillis() do Java e muitas APIs JSON usam milissegundos. Para datas atuais, um valor em segundos tem 10 dígitos e um valor em milissegundos tem 13. Confundir os dois é o bug de timestamp mais comum de todos:

new Date(1700000000)          // Tue Jan 20 1970 (tratado como ms!)
new Date(1700000000 * 1000)   // Tue Nov 14 2023

Os segundos bissextos são ignorados

O tempo Unix supõe que todo dia tem exatamente 86.400 segundos. Quando um segundo bissexto é inserido no UTC, o tempo Unix não o conta, então o timestamp não é igual ao número real de segundos SI decorridos desde 1970. Para quase todas as aplicações isso é irrelevante, e assim os cálculos com datas continuam simples.

Armadilhas comuns

O problema do ano 2038

Sistemas que armazenam timestamps como inteiro de 32 bits com sinal só conseguem contar até 2.147.483.647, que corresponde a 2038-01-19T03:14:07Z. Um segundo depois, o valor estoura e volta para um número negativo, que representa uma data em dezembro de 1901. Sistemas operacionais e linguagens modernos usam tempo de 64 bits, mas dispositivos embarcados, formatos de arquivo antigos e colunas de banco de dados declaradas como inteiros de 32 bits continuam em risco. Use inteiros de 64 bits ou tipos nativos de data/hora para tudo o que possa armazenar datas futuras.

O horário local entrando sem você perceber

Interpretar uma string de data sem fuso horário, como 2024-03-10 02:30, usa o fuso local da máquina e pode gerar timestamps diferentes em servidores diferentes, ou um horário inválido durante a mudança do horário de verão. Sempre inclua o deslocamento do fuso (offset) ou Z.

ISO 8601

Para troca de dados legível por humanos, o padrão é o ISO 8601 (e seu perfil para a internet, a RFC 3339): 2023-11-14T22:13:20Z ou 2023-11-14T23:13:20+01:00. Assim como os timestamps, strings ISO 8601 em UTC ficam na ordem correta quando ordenadas como texto simples.

Como obter o timestamp atual no código

AmbienteSegundos desde a época
Shell (Linux, macOS)date +%s
Pythonimport time; int(time.time())
JavaScriptMath.floor(Date.now() / 1000)
PHPtime()
MySQLSELECT UNIX_TIMESTAMP();
PostgreSQLSELECT EXTRACT(EPOCH FROM now());

Para converter um timestamp de volta em data na linha de comando, use date -u -d @1700000000 no Linux (GNU date) ou date -u -r 1700000000 no macOS.

Dica: Os JWTs armazenam exp, iat e nbf como timestamps Unix em segundos. O decodificador de JWT converte esses valores para você. Para identificadores ordenados por tempo que incorporam um timestamp em milissegundos, veja o gerador de UUID v7.

Perguntas frequentes

O timestamp Unix é o mesmo em todos os fusos horários?

Sim. Ele conta os segundos desde um instante fixo em UTC, então, num dado momento, é idêntico em qualquer lugar. Só muda a conversão para a hora local do relógio.

Como diferenciar segundos de milissegundos?

Conte os dígitos. Datas atuais têm 10 dígitos em segundos e 13 em milissegundos. Uma "data" em janeiro de 1970 geralmente significa que um valor em segundos foi lido como milissegundos; uma data dezenas de milhares de anos no futuro significa o contrário.

O que acontece em 2038?

Só quebra o software que armazena o tempo num inteiro de 32 bits com sinal. Timestamps de 64 bits não vão estourar por bilhões de anos.

Um timestamp Unix pode ser negativo?

Sim. Valores negativos representam momentos anteriores a 1º de janeiro de 1970, embora alguns sistemas e APIs mais antigos não os aceitem.

Atualizado

Copiado para a área de transferência