Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.
Vamos mostrar vários exemplos práticos do uso da API:
A API java.time possui uma porção de outros métodos e classes que podemos utilizar no decorrer dos projetos, trabalhar com datas, períodos, tempos, é praticamente obrigatórios em 90% dos sistemas.
A maioria dos frameworks do Mundo Java como Spring, Hibernate, JSF, já fornecem suporte full para o uso da API.
Exemplos da java.time API
Já se passaram alguns anos desde o lançamento do Java 8 e mesmo após este período, há empresas que desconhecem o poder da java.time API, esta foi uma nova API de datas introduzida no Java 8 visando resolver problemas que tínhamos com as velhas classes Date e Calendar.
Vamos mostrar vários exemplos práticos do uso da API:
Criação de objetos
No exemplo abaixo, estamos criando os objetos para manipulação de datas, perceba que temos 3 tipos, sendo LocalDate para manipular datas, LocalDateTime para manipular data/hora e LocalTime para horas:
LocalDate localDate = LocalDate.now(); LocalDateTime localDateTime = LocalDateTime.now(); LocalTime localTime = LocalTime.now();
Utilizando formatação
Aqui realizamos a operação de formatação, perceba que não foi necessário utilizar a classe SimpleDateFormat, que usaríamos em conjunto com Date ou Calendar, aqui utilizamos a DateTimeFormatter passando o formato desejado:
String strLocalDate2 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy")); String strLocalDateTime2 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("dd/MM/yyyy HH:mm:ss")); String strLocalTime2 = LocalDateTime.now().format(DateTimeFormatter.ofPattern("HH:mm:ss"));
Adicionando dias, meses e horas
Um recurso muito interessante são os métodos de adicionar períodos, quem já trabalhou com Calendar sabe como essa tarefa era complexa, onde era necessário manipular métodos void e passar constantes para determinar qual parte gostaríamos de alterar, aqui basta chamar o método plus desejado de forma fluente, veja o exemplo:LocalDate localDate3 = LocalDate.now().plusDays(1).plusMonths(1); LocalDateTime localDateTime3 = LocalDateTime.now().plusDays(1).plusMonths(1).plusHours(2);
Subtraindo dias, meses e horas
Da mesma forma que acontece a adição de valores, podemos também subtrair dados de diferentes parte do período:LocalDate localDate4 = LocalDate.now().minusDays(1).plusMonths(1); LocalDateTime localDateTime4 = LocalDateTime.now().minusDays(1).minusMonths(1).minusHours(2); LocalTime localTime4 = LocalTime.now().minusHours(1);
Criando objetos específicos
Um recurso interessante é quando criamos uma data com valores específicos, onde cada tipo possui métodos fábricas para construção dos objetos:LocalDate localDate5 = LocalDate.of(2018, 07, 22); LocalDateTime localDateTime5 = LocalDateTime.of(2018, 07, 22, 10, 15, 30); LocalTime localTime5 = LocalTime.of(10, 35, 12);
Realizando parse de String em Datas
Uma das situações mais comuns é a operação de parse, que consiste em pegar uma data como String e transformar para a classe de Período correspondente:
LocalDate localDate6 = LocalDate.parse("2018-07-22", DateTimeFormatter.ofPattern("yyyy-MM-dd")); LocalDateTime localDateTime6 = LocalDateTime.parse("2018-07-22 10:35:10", DateTimeFormatter.ofPattern("yyyy-MM-dd HH:mm:ss")); LocalTime localTime6 = LocalTime.parse("11:40:02", DateTimeFormatter.ofPattern("HH:mm:ss"));
Recuperando partes especificas de um objeto
Outro recurso interessante e muito utilizando é quando temos que recuperar uma parte especifica do objeto, podendo ser ano, mês, dia, hora, minuto, segundo:
int year = LocalDate.now().getYear(); Month month = LocalDateTime.now().getMonth(); int hour = LocalTime.now().getHour();
Comparando com os métodos isAfter, isBefore e isEqual
Com frequência temos que comparar objetos Data, analisando se um período é maior, menor ou igual ao outro, para isto temos métodos utilitários que facilitam esse tipo de ação, veja abaixo:LocalDate localDate8 = LocalDate.now(); LocalDate localDate9 = LocalDate.now().minusDays(1); boolean isAfter = localDate8.isAfter(localDate9); //true boolean isBefore = localDate8.isBefore(localDate9); //false boolean isEqual = localDate8.isEqual(localDate9); //false
Capturando Diferenças entre LocalDate com classe Period
É comum precisar saber a diferença entre dois objetos Data, aqui temos a classe Period que possui vários métodos utilitários para esta finalidade, esta classe representa o tempo em anos, meses e dias, vamos testar o método between que recupera a diferença entre dois objetos LocalDate, veja abaixo:
LocalDate localDate10 = LocalDate.now(); LocalDate localDate11 = LocalDate.now().plusDays(2); Period period1 = Period.between(localDate10, localDate11);
Capturando Diferenças com a Enum ChronoUnit
A Enum ChronoUnit é utilizada para manipular Tempos, com ela podemos manipular tempos de diferentes formas, podemos utiliza-la em conjunto com LocalDate, LocalDateTime e LocalTime, segue o exemplo:
LocalDateTime localDateTime12 = LocalDateTime.now(); LocalDateTime localDateTime13 = LocalDateTime.now().plusDays(2); long periodAsMinutes = ChronoUnit.MINUTES.between(localDateTime12, localDateTime13); long periodAsHours = ChronoUnit.HOURS.between(localDateTime12, localDateTime13); long periodAsDays = ChronoUnit.DAYS.between(localDateTime12, localDateTime13);
A API java.time possui uma porção de outros métodos e classes que podemos utilizar no decorrer dos projetos, trabalhar com datas, períodos, tempos, é praticamente obrigatórios em 90% dos sistemas.
A maioria dos frameworks do Mundo Java como Spring, Hibernate, JSF, já fornecem suporte full para o uso da API.
Até mais.
Excelente post, simples e direto no assunto.
ResponderExcluirObrigado Carlos.
ExcluirExcelente conteúdo, obrigado por compartilhar.
ExcluirExcelente
ResponderExcluirMuito Obrigado! Se todos dessem exemplos práticos assim seria ótimo.
ResponderExcluirExcelente explicação. Obrigado.
ResponderExcluir