Java Time

Instant

Java Time Considerações Finais

A classe Java Instant é usada para representar um momento específico na linha do tempo. Isso pode ser usado para registrar carimbos de data/hora do evento no aplicativo. Esta classe é imutável e thread-safe.

Ao contrário do antigo java.util.Date que tem precisão de milissegundos, um Instant tem precisão de nanossegundos. Representar um ponto no tempo usando precisão de nanossegundos requer o armazenamento de um número maior que um longo. Para conseguir isso, a classe armazena um long que representa os segundos de época e um int que representa nanossegundos de segundo, que sempre estará entre 0 e 999.999.999. Os segundos da época são medidos a partir da época Java padrão de 1970-01-01T00:00:00Z, onde os instantes após a época têm valores positivos e os instantes anteriores têm valores negativos.

Instanciação


//1970-01-01T00:00:00Z até 2023-03-13T13:18:00Z
long milisegundos = 1678713480000l;
Instant instant = Instant.ofEpochMilli(milisegundos);
System.out.println(instant);

long segundos = milisegundos / 1000;
instant = Instant.ofEpochSecond(segundos);
System.out.println(instant);

Manipulação

Instant instant = Instant.parse("1984-08-13T10:15:30.345Z");

System.out.println("Instant             : " + instant);

// Adding/subtracting seconds
System.out.println("15 seconds before   : " + instant.minusSeconds(15));
System.out.println("10 seconds after    : " + instant.plusSeconds(10));

// Adding/subtracting millis
System.out.println("Minus 45000 millis  : " + instant.minusMillis(45000));
System.out.println("Plus 10000 millis   : " + instant.plusMillis(10000));

// Adding/subtracting nanos
System.out.println("Minus 45123456 nanos: " + instant.minusNanos(45123456));
System.out.println("Plus 111234567 nanos: " + instant.plusNanos(111234567));

// Using MINUTES
System.out.println("45 minutes before   : " + instant.minus(45, ChronoUnit.MINUTES));
// Using HOURS
System.out.println("3 hours before      : " + instant.minus(3, ChronoUnit.HOURS));
// Using MILLIS also supported
System.out.println("30000 millis later  : " + instant.plus(30000, ChronoUnit.MILLIS));
// Using DAYS
System.out.println("10 days later       : " + instant.plus(10, ChronoUnit.DAYS));

// Using TemporalAmount - Duration
System.out.println("10 seconds before   : " + instant.minus(Duration.ofSeconds(10)));
// Using TemporalAmount - Period
System.out.println("5 days later        : " + instant.plus(Period.ofDays(5)));

Comparação

Instant instant1 = Instant.parse("1984-08-13T10:15:30.345Z");
Instant instant2 = Instant.now();

System.out.println(instant1.isAfter(instant2)); //false
System.out.println(instant1.equals(instant2)); //false

Formatação

DateTimeFormatter formatter = DateTimeFormatter.ofPattern("dd.MM.yyyy").withZone(ZoneId.systemDefault());

Instant instant = Instant.parse("2022-02-15T18:35:24.00Z");
String formattedInstant = formatter.format(instant);

System.out.println(formattedInstant); //15.02.2022

Dados específicos

Instant instant = Instant.now();
System.out.println("Instant    : " + instant);

long epochSecond = instant.getEpochSecond();
System.out.println("EpochSecond: " + epochSecond);

int nano = instant.getNano();
System.out.println("Nano       : " + nano);