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:
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:
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:
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:
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:
1 |
boolean datesIguais = DateUtils.isSameDay(novaDateMaisUmDia, novaDateMenosUmDia); |
Agora com a nova API podemos realizar a mesma comparação utilizando diretamente o método equals:
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:
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!
Leave a Reply