Executando verificação de segurança...
1

[JAVA] : Dates, Instante, ZonedDateTime, LocalDateTime…. E agora?

A forma de trabalhar com datas na linguagem Java mudou nos últimos anos, o pacote mais utilizado foi o java.util, e muitas aplicações ainda o utilizam. A partir da versão 8, o java.util caiu em uso obsoleto em favor do java.time, que inclui recursos para aumentar a produtividade.

A tabela abaixo mostra um pequeno guia para a migração.

Sobre isso, mostrarei alguns exemplos de como usar a nova classe.

String Date To ZonedDateTime

import java.time.*;
import java.time.format.DateTimeFormatter;

public class StringToZonedDateTime {
    public static void main(String args[]) {

        //Format can be change by necessity
        final String initialStringDate = "12/09/2021 00:00:00";
        final String finalStringDate = "13/09/2021 00:00:00";

        //LocalDateTime its a midle chanel for conversion
        LocalDateTime initialLocalDate = LocalDateTime.parse(
                initialStringDate,
                DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss") //Obey the format from your String date 
        );
        LocalDateTime finalLocalDate = LocalDateTime.parse(
                finalStringDate,
                DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")
        );

        //Here we are used the UTC TimeZone
        //But if we use TimeZone America/Sao_Paulo the ZonedDateTime plus 3 hours in the Date automatically
        ZonedDateTime initialZonedDateTime = ZonedDateTime.of(initialLocalDate, ZoneId.of("UTC"));
        ZonedDateTime finalZonedDateTime = ZonedDateTime.of(finalLocalDate, ZoneId.of("UTC"));

        //Convert to Human       
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
        String formattedString = initialZonedDateTime.format(formatter);
        String formattedString2 = finalZonedDateTime.format(formatter);

        System.out.println(formattedString);
        System.out.println(formattedString2);
    }
}

Add Time To ZonedDateTime

import java.time.*;
import java.time.format.DateTimeFormatter;

public class AddTimeToZonedDateTime {
    public static void main(String args[]) {

        //Format can be change by necessity
        final String myStringDate = "12/09/2021 00:00:00";

        //LocalDateTime its a midle chanel for conversion
        LocalDateTime myLocalDateTime = LocalDateTime.parse(
                myStringDate,
                DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")  //Formato o Obedece a entrada String
        );

        //Transforming String date to ZonedDateTime      
        ZonedDateTime initialZonedTime = ZonedDateTime.of(myLocalDateTime, ZoneId.of("UTC"));

        //Instante has a function for convert based on epochSecond (Long value) 
        Instant myInstanteDate = Instant.ofEpochSecond(initialZonedTime.toEpochSecond() + 3600);

        ZonedDateTime myZonedTimeWithMore1Hour = ZonedDateTime.ofInstant(myInstanteDate, ZoneId.of("UTC"));

        //Convert for Human
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy - HH:mm:ss Z");
        String formattedString = myZonedTimeWithMore1Hour.format(formatter);

        System.out.println(formattedString);
    }
} 

Nesta tabela podemos ver alguns valores para Epoch Time

Conclusão

Em geral, java.time tem várias funções. Ele vem com uma proposta bem interessante de ter funções mais semânticas, mais performatícas e melhor calculo de tempo. Apesar de não serem abordadas aqui, muitas outras funções facilitam o dia a dia, como:

//Comparetors 
ZonedDateTime.isAfter()
ZonedDateTime.isBefore()
ZonedDateTime.isAfter()  
//Substract 
ZonedDateTime.minusHours() 
ZonedDateTime.minusWeeks()  
//Plus 
ZonedDateTime.plusHours()
ZonedDateTime.plusWeeks()

Você pode ver mais detalhes em:
Oracle Documentation

Carregando publicação patrocinada...