Data do incremento em Java
1. Visão geral
Neste tutorial, veremos maneiras de incrementar a data em um dia usando Java. Antes do Java 8, as bibliotecas padrão de data e hora do Java não eram muito amigáveis. Portanto, o Joda-Time se tornou a biblioteca de data e hora padrão de fato do Java anterior ao Java 8.
Existem também outras classes e bibliotecas que podem ser usadas para realizar a tarefa, comojava.util.Calendare Apache Commons.
O Java 8 incluiu uma API de data e hora melhor para solucionar as deficiências de suas bibliotecas mais antigas.
Portanto, estamos olhando parahow to increment date by one day using Java 8, Joda-Time API, Java’s Calendar class and Apache Commons library.
2. Dependências do Maven
As seguintes dependências devem ser incluídas no arquivopom.xml:
joda-time
joda-time
2.10
org.apache.commons
commons-lang3
3.5
Você pode encontrar a versão mais recente do Joda-Time emMaven Central, e também a versão mais recente deApache Commons Lang.
3. Usandojava.time
O sclassjava.time.LocalDate é uma representação data-hora imutável, geralmente vista como ano-mês-dia.
LocalDate tem muitos métodos para manipulação de data, vamos ver como podemos usá-lo para realizar a mesma tarefa:
public static String addOneDay(String date) {
return LocalDate
.parse(date)
.plusDays(1)
.toString();
}
Neste exemplo, estamos usandojava.time.LocalDate class e seu métodoplusDays() para incrementar a data em um dia.
Agora, vamos verificar se esse método está funcionando conforme o esperado:
@Test
public void givenDate_whenUsingJava8_thenAddOneDay()
throws Exception {
String incrementedDate = addOneDay("2018-07-03");
assertEquals("2018-07-04", incrementedDate);
}
4. Usandojava.util.Calendar
Outra abordagem é usarjava.util.Calendar lixar seu métodoadd() para incrementar a data.
Vamos usá-lo junto comjava.text.SimpleDateFormat para fins de formatação de data:
public static String addOneDayCalendar(String date)
throws ParseException {
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
Calendar c = Calendar.getInstance();
c.setTime(sdf.parse(date));
c.add(Calendar.DATE, 1);
return sdf.format(c.getTime());
}
java.text.SimpleDateFormat is lá para garantir que o formato de data esperado seja usado. A data é aumentada por meio do métodoadd() .
Mais uma vez, vamos garantir que essa abordagem funcione conforme o esperado:
@Test
public void givenDate_whenUsingCalendar_thenAddOneDay()
throws Exception {
String incrementedDate = addOneDayCalendar("2018-07-03");
assertEquals("2018-07-04", incrementedDate);
}
5. Usando Joda-Time
O sclassorg.joda.time.DateTime possui muitos métodos que ajudam a lidar adequadamente com data e hora.
Vamos ver como podemos usá-lo para incrementar a data em um dia:
public static String addOneDayJodaTime(String date) {
DateTime dateTime = new DateTime(date);
return dateTime
.plusDays(1)
.toString("yyyy-MM-dd");
}
Aqui, usamosorg.joda.time.DateTime class e seu métodoplusDays() para incrementar a data em um dia.
Podemos verificar se o código acima funciona com o seguinte teste de unidade:
@Test
public void givenDate_whenUsingJodaTime_thenAddOneDay() throws Exception {
String incrementedDate = addOneDayJodaTime("2018-07-03");
assertEquals("2018-07-04", incrementedDate);
}
6. Using Apache Commons
Outra biblioteca comumente usada para manipulação de datas (entre outras coisas) é o Apache Commons. É um conjunto de utilitários que cercam o uso dos objetosjava.util.Calendarejava.util.Date.
Para nossa tarefa, podemos usar o sclassorg.apache.commons.lang3.time.DateUtils e seu métodoaddDays() (observe queSimpleDateFormat é usado novamente para formatação de data):
public static String addOneDayApacheCommons(String date)
throws ParseException {
SimpleDateFormat sdf
= new SimpleDateFormat("yyyy-MM-dd");
Date incrementedDate = DateUtils
.addDays(sdf.parse(date), 1);
return sdf.format(incrementedDate);
}
Como de costume, verificaremos os resultados com um teste de unidade:
@Test
public void givenDate_whenUsingApacheCommons_thenAddOneDay()
throws Exception {
String incrementedDate = addOneDayApacheCommons(
"2018-07-03");
assertEquals("2018-07-04", incrementedDate);
}
7. Conclusão
Neste artigo rápido, analisamos várias abordagens para lidar com uma tarefa simples de incrementar a data em um dia. Mostramos como isso pode ser realizado usando as principais APIs do Java, bem como algumas bibliotecas populares de terceiros.
Os exemplos de código usados neste artigo podem ser encontradosover on GitHub.