• Skip to primary navigation
  • Skip to content

Mauda

IT, Java and Music

Graduação   SCJP   Mestrado
  • Apresentação
  • Certificação Java
  • JPA
    • Exceptions
  • JSF
  • Versionamento
  • Contato

Migrando java.util.Date para a API de data/hora do Java 8

February 15, 2021 by Mauda Leave a Comment

Conteúdo do Post:
  1. Diferenças na declaração
  2. Adicionando Dias ou minutos ou horas…
  3. Comparação entre Datas
  4. finally {

Olá Pessoal, tudo bom?

A partir do Java 8 foi incluído uma excelente biblioteca de data e hora, dentro do novo package java.time. No artigo de hoje mostraremos um pouco sobre como essa mudança afeta o código básico do Java. Essas anotações descritas aqui foram retiradas de uma migração que realizei de meus projetos básicos utilizados para as aulas. Assim existem muitas outras coisas, mas aqui é o que consegui de relevante nessa migração.

Diferenças na declaração

Antes existiam algumas formas de declarar datas, com o mais comum sendo a classe java.util.Date. Essa classe armazena em millesegundos a data desde o dia 1 de janeiro de 1970. Dessa forma, ela abriga tanto data (ano, mês e dia) quanto tempo do dia (hora, minuto e segundo/milissegundo). Para declarar uma nova instância com a data/hora atual utiliza-se o seguinte código:

Java
1
Date novaDate = new Date();

Isso obtém a data/hora atual da jvm e coloca em uma variável no caso novaDate.

No novo package java.time existem várias classes que trabalham com data e tempo, mas vamos nos ater a três classes:

  • java.time.LocalDate
  • java.time.LocalTime
  • java.time.LocalDateTime

A LocalDate trabalha apenas com a data, já a LocalTime trabalha apenas com o dia e a LocalDateTime trabalha com ambos os valores. Todas essas classes não trabalham com TimeZone, existem classes específicas para isso. Além disso, todas são imutáveis como a classe String, ou seja, ao “criar” uma instância essa será única perante toda a JVM, não sendo possível alterá-la.Para declarar uma nova instância com a data/hora atual utiliza-se o seguinte código:

Java
1
2
3
LocalDate novaLocalDate = LocalDate.now();
LocalTime novaLocalTime = LocalTime.now();
LocalDateTime novaLocalDateTime = LocalDateTime.now();

 

Adicionando Dias ou minutos ou horas…

Para realizar a adição de novos dias em uma instância de Date, eu utilizava a classe DateUtil da biblioteca Apache Commnons, com o método DateUtils.addDays(Date, int). Esse método utilizava tanto para adicionar dias, passando um inteiro positivo, ou diminuir dias, passando um inteiro negativo, na instância de Date. Por exemplo:

Java
1
2
Date novaDateMaisUmDia = DateUtils.addDays(novaDate, 1);
Date novaDateMenosUmDia = DateUtils.addDays(novaDate, -1);

Já na nova package java.time existe um conjunto de métodos plus() ou minus(). Como existem classes que trabalham apenas com datas e outras que trabalham apenas com o tempo, métodos diferentes existirão. Observe nos exemplos abaixo:

Java
1
2
3
4
5
6
7
8
9
10
LocalDate novaLocalDateMaisUmDia = novaLocalDate.plusDays(1L);
LocalDate novaLocalDateMenosUmDia = novaLocalDate.minusDays(1L);
 
LocalTime novaLocalTimeMaisUmaHora = novaLocalTime.plusHours(1L);
LocalTime novaLocalTimeMenosUmaHora = novaLocalTime.minusHours(1L);
 
LocalDateTime novaLocalDateTimeMaisUmDia = novaLocalDateTime.plusDays(1L);
LocalDateTime novaLocalDateTimeMenosUmDia = novaLocalDateTime.minusDays(1L);
LocalDateTime novaLocalDateTimeMaisUmaHora = novaLocalDateTime.plusHours(1L);
LocalDateTime novaLocalDateTimeMenosUmaHora = novaLocalDateTime.minusHours(1L);

 

Comparação entre Datas

Por fim o último ponto necessário para a migração do projeto foi a parte de comparação de datas. No modo antigo relizava a comparação utilizando o método isSameDay() da classe DateUtils da seguinte forma:

Java
1
boolean datesIguais = DateUtils.isSameDay(novaDateMaisUmDia, novaDateMenosUmDia);

Agora com a nova API podemos realizar a mesma comparação utilizando diretamente o método equals:

Java
1
novaLocalDateMaisUmDia.equals(novaLocalDateMenosUmDia);

Para comparar datas antes ou depois com o Date existiam os métodos after() e before(). Na nova API existem os métodos isAfter() e isBefore(), que basicamente tem as mesmas características:

Java
1
2
3
boolean ehDepoisDate = novaDateMaisUmDia.after(novaDateMenosUmDia);
 
boolean ehDepoisLocalDate = novaLocalDateMaisUmDia.isAfter(novaLocalDateMenosUmDia);

 

finally {

Existem inúmeros outros pontos que a nova API de data e hora trouxe de benefícios ao Java, sempre é interessante verificar a documentação a fim de descobrir novos métodos e formas de utilização.

Duvidas ou sugestões? Deixe seu feedback! Isso ajuda a saber a sua opinião sobre os artigos e melhorá-los para o futuro! Isso é muito importante!

Até um próximo post!

Filed Under: Date, Java, JDK 8 Tagged With: Date, Java, LocalDate, LocalDateTime, LocalTime

About Mauda

Mestre em Informática, Analista de Sistemas, Professor, SCJP e Baterista. Desde 2002 trabalhando no mundo Java e ensinando pessoas sobre desenvolvimento de sistemas. Mais informações

Reader Interactions

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.

Advertisements

Copyright © 2025 · Genesis Framework · WordPress · Log in