Рубрики
Без рубрики

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

Обзор различных основных и сторонних методов добавления дней к дате

Автор оригинала: baeldung.

1. Обзор

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

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

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

Поэтому мы рассматриваем как увеличить дату на один день с помощью Java 8, API Joda-Time, Java Calendar class и библиотеки Apache Commons .

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

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


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

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

3. Использование java.time

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

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

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

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

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

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

4. Использование java.util.Календарь

Другой подход-использование java.util.Календарь и его 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-Времени

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 class и его plus Days() метод для увеличения даты на один день.

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

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

6. Использование Apache Commons

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

Для нашей задачи мы можем использовать 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, а также некоторых популярных сторонних библиотек.

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