Pular para o conteúdo principal

Utilizando LocalDate, LocalDateTime e LocalTime na Prática

Tudo bem pessoal, hoje iremos avaliar e analisar operações de manipulação de Datas envolvendo a JavaTime API introduzida no Java 8.

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.

Código fonte

Referências

Comentários

Postar um comentário

Postagens mais visitadas deste blog

Lendo e Manipulando arquivos CSV com Java

Olá hoje veremos como realizar a leitura e manipulação de arquivos CSV com Java, mostrando que as novas versões da plataforma Java deixaram algumas tarefas simples de serem realizadas.

Exemplo de Arquivo Hoje em dia é comum ao realizar integrações ou carga de dados o uso de arquivos CSV, isto porque, este arquivo possui uma estrutura de fácil entendimento e simples de manipular na maioria das plataformas de desenvolvimento.

Para realizar a leitura dos dados vamos manipular um arquivo com as seguintes colunas: namecpfagephone address:

name;cpf;age;phone;address caio;123456789;20;1145223643;AvenidaPaulista vinicius;147852369;18;1125253625;AvenidaManoel sandra;963258741;30;1174587858;RuaTeixeira regina;125478522;40;1145254536;RuaFernando fernando;785245563;42;1145253669;RuaPereira augusto;456123014;50;1125363633;AvenidaPaulinia maria;456123789;10;1125455525;AvenidaNossaSenhora
Para representar os dados em objetos Java iremos utilizar a seguinte classe:

importlombok.AllArgsConstruc…

Versionamento de Banco Dados com Flyway

Olá pessoal, hoje iremos analisar e aprender como realizar o versionamento e gerenciamento das bases de dados relacionais utilizando o framework Flyway.

Versionamento de Banco Dados Ao trabalhar com desenvolvimento de sistemas é comum realizarmos o versionamento, isso porque uma aplicação pode necessitar de correções, novas funcionalidades e evoluções, onde para garantir a compatibilidade e cuidar do seu ciclo de vida, geramos versões onde é especificado quais itens estão presentes em cada release.
Vamos imaginar seguinte cenário: Sistema ERP1.0.0: Entrega dos módulos Financeiro e RH;1.1.0: Entrega do módulo Contas a Receber. Perceba que a ideia é controlar o que cada versão possui de diferente, e para controlar essas mudanças no lado da aplicação existem várias técnicas e ferramentas, mas e para controlar as mudanças no lado do Banco de dados ? 
Para isso podemos utilizar ferramentas de versionamento que ajudam a realizar este controle, a ferramenta que iremos utilizar é o Flyway.
Con…