Data do incremento em Java

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.