Дата на увеличаване в Java

1. Общ преглед

В този урок ще разгледаме начини за увеличаване на датата с един ден с помощта на Java. Преди Java 8, стандартните библиотеки за дата и час на Java не бяха много лесни за ползване. Следователно Joda-Time стана де факто стандартната библиотека за дата и час за Java преди Java 8.

Има и други класове и библиотеки, които могат да се използват за изпълнение на задачата, като java.util.Calendar и Apache Commons.

Java 8 включва по-добър API за дата и час, за да отстрани недостатъците на своите по-стари библиотеки.

Следователно разглеждаме как да увеличим датата с един ден, използвайки Java 8, API на Joda-Time, клас Календар на Java и библиотека Apache Commons .

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 и неговия метод 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. Използване на 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, както и някои популярни библиотеки на трети страни.

Примерите за кодове, използвани в тази статия, могат да бъдат намерени в GitHub.