O tempo Unix em um parágrafo
O tempo Unix conta os segundos passados desde 00:00:00 UTC de 1º de janeiro de 1970, um momento conhecido como epoch. Ele ignora completamente fusos horários e horário de verão: num dado instante, o tempo Unix é o mesmo número em qualquer lugar da Terra. Isso o torna o formato natural para guardar e comparar momentos em bancos de dados, arquivos de log, claims exp e iat de JWT, datas de modificação de arquivos, respostas de API e agendadores no estilo cron. O problema é que 1700000000 não significa nada para um ser humano, e é para isso que serve este conversor. Só para constar, esse número corresponde a 14 de novembro de 2023, 22:13:20 UTC.
Segundos, milissegundos e números mais longos
Sistemas diferentes contam em unidades diferentes:
- Segundos, 10 dígitos para datas atuais: ferramentas Unix e Linux,
time()do PHP,time.time()do Python (com parte fracionária), a maioria dos bancos de dados SQL, JWTs. - Milissegundos, 13 dígitos:
Date.now()do JavaScript,System.currentTimeMillis()do Java, muitas APIs JSON e eventos de analytics. - Microssegundos, 16 dígitos, e nanossegundos, 19 dígitos: alguns bancos de dados, Go, ferramentas de rastreamento de alta resolução.
A ferramenta decide a unidade pelo tamanho. Qualquer número inteiro com valor absoluto abaixo de 100.000.000.000 é lido como segundos, até 100.000.000.000.000 (14 dígitos) como milissegundos, abaixo de 10^17 como microssegundos, e qualquer coisa maior como nanossegundos. Esses limites funcionam para todos os casos realistas: em segundos, o primeiro seria o ano 5138; em milissegundos, o início de março de 1973.
Valores em microssegundos e nanossegundos são cortados para a precisão de milissegundos, já que é só isso que as saídas mostram. Entradas fracionárias como 1700000000.5 não são aceitas, então tire a parte decimal antes.
Números negativos funcionam e dão datas anteriores a 1970: -86400 é 31 de dezembro de 1969.
Como ler as seis saídas
- Unix, segundos e Unix, milissegundos: o mesmo instante nas duas unidades. Os milissegundos são mantidos quando você cola uma data com parte de tempo como
.250; o valor em segundos é arredondado para baixo. - ISO 8601: por exemplo
2023-11-14T22:13:20.000Z. Sempre em UTC, marcado peloZ, com precisão de milissegundos. É o formato mais seguro para APIs e JSON, porque é ordenado corretamente como texto e toda linguagem o interpreta. - UTC: o estilo de data do HTTP,
Tue, 14 Nov 2023 22:13:20 GMT, usado nos cabeçalhosExpires,Last-Modifiede de cookies. - Seu fuso horário: dia/mês/ano com relógio de 24 horas, seguido da abreviação do fuso (ou de um deslocamento GMT quando ela não existe) e do nome do fuso que o seu navegador informa, como
Europe/Berlin. O horário de verão é aplicado conforme aquela data, não o deslocamento de hoje. - Relativo: expressões como "ontem", "em 3 dias" ou "há 2 anos". Ele é aproximado de propósito: os meses são calculados pela média de cerca de 30,4 dias, e o valor se atualiza enquanto a página está aberta.
Como converter uma data em timestamp
Você pode colar uma data em vez de um número. Strings ISO 8601 são a entrada mais confiável, e vale conhecer as regras de fuso horário, porque elas causam a maioria dos erros de algumas horas:
2024-05-01T12:00:00Ze2024-05-01T12:00:00+02:00trazem o próprio deslocamento e não deixam dúvida.2024-05-01sem horário é tratado como meia-noite UTC.2024-05-01T12:00e2024-05-01 12:00, uma data com horário mas sem deslocamento, são tratados como seu horário local.
Então, se você está em Berlim no verão, 2024-05-01 e 2024-05-01 00:00 diferem em duas horas. Ao converter para um servidor ou uma API, acrescente Z ou um deslocamento explícito para eliminar a adivinhação.
Outros formatos, como May 1, 2024 12:00, dependem do parser de datas do navegador e podem se comportar de modo diferente entre Chrome, Firefox e Safari. Formatos com o dia primeiro, como 01/05/2024, são lidos com o mês primeiro, no estilo americano, ou rejeitados, então evite-os.
Armadilhas que vale conhecer
- Segundos intercalares. O tempo Unix finge que todo dia tem exatamente 86.400 segundos. Os 27 segundos intercalares adicionados desde 1972 não são contados, o que só importa para medições científicas precisas.
- O problema do ano 2038. Sistemas que guardam o tempo Unix como inteiro de 32 bits com sinal estouram em
2147483647, que é 19 de janeiro de 2038, 03:14:07 UTC. Cole esse número para ver. Sistemas modernos de 64 bits não são afetados, mas dispositivos embarcados antigos e formatos de arquivo podem ser. - Relógio dessincronizado. Se um JWT é rejeitado como "ainda não válido" ou "expirado", compare o
iate oexpdele com a Hora Unix atual, ao vivo no topo da página. Uma diferença de poucos minutos indica um relógio errado, e não um token inválido.
Para ler as claims de um token, decodifique a parte do meio com a ferramenta Base64 e organize o JSON no formatador de JSON. As conversões rodam no seu navegador, usando o relógio e as configurações de fuso horário dele.