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);