Дата приращения в 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.