Дата приращения в Java

Дата приращения в Java

1. обзор

В этом руководстве мы рассмотрим способы увеличения даты на один день с помощью Java. До Java 8 стандартные библиотеки даты и времени Java были не очень удобны для пользователя. Следовательно, Joda-Time стала де-факто стандартной библиотекой даты и времени для Java до Java 8.

Существуют также другие классы и библиотеки, которые можно использовать для выполнения этой задачи, напримерjava.util.Calendar и Apache Commons.

Java 8 включила улучшенный API даты и времени для устранения недостатков своих старых библиотек.

Следовательно, мы смотрим наhow to increment date by one day using Java 8, Joda-Time API, Java’s Calendar class and Apache Commons library.

2. Maven Зависимости

В файлpom.xml необходимо включить следующие зависимости:


    
        joda-time
        joda-time
        2.10
    
    
        org.apache.commons
        commons-lang3
        3.5
    

Вы можете найти последнюю версию Joda-Time наMaven Central, а также последнюю версиюApache Commons Lang.

3. Используяjava.time

Классjava.time.LocalDate - это неизменное представление даты и времени, которое часто рассматривается как год-месяц-день.

LocalDate имеет много методов для манипулирования датами, давайте посмотрим, как мы можем использовать его для выполнения той же задачи:

public static String addOneDay(String date) {
    return LocalDate
      .parse(date)
      .plusDays(1)
      .toString();
}

В этом примере мы используемjava.time.LocalDate class и его методplusDays()  для увеличения даты на один день.

Теперь давайте убедимся, что этот метод работает должным образом:

@Test
public void givenDate_whenUsingJava8_thenAddOneDay()
  throws Exception {

    String incrementedDate = addOneDay("2018-07-03");
    assertEquals("2018-07-04", incrementedDate);
}

4. Используяjava.util.Calendar

Другой подход заключается в использованииjava.util.Calendar и его методаadd() для увеличения даты.

Мы будем использовать его вместе сjava.text.SimpleDateFormat  для форматирования даты:

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 , чтобы гарантировать использование ожидаемого формата даты. Дата увеличивается с помощью методаadd() .

Еще раз убедимся, что этот подход работает так, как задумано:

@Test
public void givenDate_whenUsingCalendar_thenAddOneDay()
  throws Exception {

    String incrementedDate = addOneDayCalendar("2018-07-03");
    assertEquals("2018-07-04", incrementedDate);
}

5. Использование Joda-Time

Классorg.joda.time.DateTime имеет множество методов, которые помогают правильно работать с датой и временем.

Давайте посмотрим, как с его помощью увеличить дату на один день:

public static String addOneDayJodaTime(String date) {
    DateTime dateTime = new DateTime(date);
    return dateTime
      .plusDays(1)
      .toString("yyyy-MM-dd");
}

Здесь мы используем классorg.joda.time.DateTime и его методplusDays()  для увеличения даты на один день.

Мы можем убедиться, что приведенный выше код работает с помощью следующего модульного теста:

@Test
public void givenDate_whenUsingJodaTime_thenAddOneDay() throws Exception {
    String incrementedDate = addOneDayJodaTime("2018-07-03");
    assertEquals("2018-07-04", incrementedDate);
}

6. Using Apache Commons

Другой библиотекой, обычно используемой для манипулирования датами (среди прочего), является Apache Commons. Это набор утилит, связанных с использованием объектовjava.util.Calendar иjava.util.Date.

Для нашей задачи мы можем использовать классorg.apache.commons.lang3.time.DateUtils и его методaddDays()  (обратите внимание, чтоSimpleDateFormat снова используется для форматирования даты):

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);
}

Как обычно, мы проверим результаты с помощью модульного теста:

@Test
public void givenDate_whenUsingApacheCommons_thenAddOneDay()
  throws Exception {

    String incrementedDate = addOneDayApacheCommons(
      "2018-07-03");
    assertEquals("2018-07-04", incrementedDate);
}

7. Заключение

В этой быстрой статье мы рассмотрели различные подходы к решению простой задачи увеличения даты на один день. Мы показали, как этого можно добиться с помощью основных API-интерфейсов Java, а также некоторых популярных сторонних библиотек.

Примеры кода, использованные в этой статье, можно найти вover on GitHub.