Trechos de timestamp Unix em Java
Exemplos de Java para segundos epoch atuais, milissegundos, conversão com Instant, formatação ciente de fuso e as APIs modernas do java.time.
import java.time.Instant;
Instant.now().getEpochSecond()System.currentTimeMillis()
// or
Instant.now().toEpochMilli()import java.time.Instant;
Instant.ofEpochSecond(1700000000)
Instant.ofEpochMilli(1700000000000L)import java.time.*;
import java.time.format.DateTimeFormatter;
Instant.ofEpochSecond(1700000000)
.atZone(ZoneOffset.UTC)
.format(DateTimeFormatter.ISO_DATE_TIME)import java.time.*;
Instant.ofEpochSecond(1700000000)
.atZone(ZoneId.of("America/New_York"))
.toString()Noções básicas de marcas de tempo em Java
O código Java moderno deve preferir java.time.Instant para o trabalho com marcas de tempo. Instant.now().getEpochSecond() dá segundos Unix e Instant.now().toEpochMilli() dá milissegundos Unix.
De millis do Java para marca de tempo Unix
O código Java costuma começar com System.currentTimeMillis() — um long de milissegundos epoch. Para uma marca de tempo Unix padrão em segundos, divida por 1000. Para uma data, construa um Instant. Use as conversões explícitas abaixo em vez de passar o long por diferentes APIs que podem esperar uma ou outra unidade.
- long millis = System.currentTimeMillis(); // 13 digits, epoch ms
- long secs = System.currentTimeMillis() / 1000L; // millis to Unix timestamp
- Instant inst = Instant.ofEpochMilli(millis); // currentTimeMillis to date (Instant)
- String iso = Instant.ofEpochMilli(millis).toString(); // ISO 8601 UTC
- ZonedDateTime zdt = Instant.ofEpochMilli(millis).atZone(ZoneId.of("UTC"));
- Use System.nanoTime() apenas para medições de tempo decorrido — não é baseado em epoch
Formatação Java com fuso horário
Converta um Instant em um ZonedDateTime com ZoneId ao exibir a hora local. Mantenha armazenamento e comparações em Instant ou UTC e formate apenas na borda da aplicação.
Notas de produção para Java
A API java.time separa instantes, valores de calendário locais e exibição com fuso. Use Instant para o momento que deve ser armazenado ou comparado. Use ZonedDateTime apenas depois de selecionar uma ZoneId para um usuário, inquilino ou relatório. Evite os antigos Date e Calendar, a menos que uma biblioteca mais antiga os exija.
- Use Instant.now().getEpochSecond() para segundos Unix
- Use Instant.now().toEpochMilli() ou System.currentTimeMillis() para milissegundos
- Use Instant.ofEpochSecond(seconds) ao receber marcas de tempo Unix padrão
- Use DateTimeFormatter.ISO_INSTANT para saída de API UTC compacta
FAQ
- Código novo deve usar Date ou Instant?
- Use Instant para armazenamento e comparação de marcas de tempo. O antigo Date ainda pode aparecer em bibliotecas antigas, mas java.time é mais claro para segundos, milissegundos e formatação ciente de fuso.
- Qual é a diferença entre Instant e ZonedDateTime?
- Instant é o momento exato em UTC. ZonedDateTime é esse momento exibido com um ZoneId, o que é útil para datas e relatórios voltados ao usuário.
- Como verifico valores epoch em Java?
- Imprima Instant.ofEpochSecond(seconds) ou Instant.ofEpochMilli(milliseconds) antes de salvar um valor. A saída ISO deve corresponder ao instante UTC esperado pelo sistema receptor.
- Como converto millis em uma marca de tempo Unix em Java?
- Divida System.currentTimeMillis() por 1000L para um long de segundos Unix: long secs = System.currentTimeMillis() / 1000L. Use Instant.ofEpochSecond(secs) para voltar a um Instant.
- Como converto currentTimeMillis em uma data em Java?
- Envolva-o em um Instant: Instant.ofEpochMilli(System.currentTimeMillis()). Para exibir, combine com um ZoneId: ZonedDateTime.ofInstant(instant, ZoneId.of("UTC")) ou qualquer outra zona IANA.