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 .