1. 概要

このチュートリアルでは、Javaを使用して日付を1日増やす方法を見ていきます。 Java 8より前は、標準のJava日付と時刻のライブラリはあまりユーザーフレンドリーではありませんでした。 したがって、Joda-Timeは、Java8より前のJavaのデファクトスタンダードの日付と時刻のライブラリになりました。

java.util.CalendarやApacheCommonsなど、タスクを実行するために使用できる他のクラスやライブラリもあります。

Java 8には、古いライブラリの欠点に対処するためのより優れた日時APIが含まれていました。

したがって、 Java 8、Joda-Time API、JavaのCalendarクラス、およびApacheCommonsライブラリを使用して日付を1日インクリメントする方法を検討しています。

2. Mavenの依存関係

次の依存関係をpom.xmlファイルに含める必要があります。

<dependencies>
    <dependency>
        <groupId>joda-time</groupId>
        <artifactId>joda-time</artifactId>
        <version>2.10</version>
    </dependency>
    <dependency>
        <groupId>org.apache.commons</groupId>
        <artifactId>commons-lang3</artifactId>
        <version>3.12.0</version>
    </dependency>
</dependencies>

Joda-Timeの最新バージョンは、 Maven Central と、 Apache CommonsLangの最新バージョンで見つけることができます。

3. java.timeを使用する

java.time.LocalDate クラスは不変の日時表現であり、多くの場合、年-月-日と見なされます。

LocalDate には日付操作のための多くのメソッドがあります。それを使用して、同じタスクを実行する方法を見てみましょう。

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

この例では、 java .time.LocalDateクラスとそのplusDays()メソッドを使用して、日付を1日インクリメントしています。

ここで、このメソッドが期待どおりに機能していることを確認しましょう。

@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 クラスには、日付と時刻を適切に処理するのに役立つ多くのメソッドがあります。

これを使用して日付を1日インクリメントする方法を見てみましょう。

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

ここでは、 org.joda.time.DateTimeクラスとそのplusDays()メソッドを使用して、日付を1日インクリメントします。

上記のコードが次の単体テストで機能することを確認できます。

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

6.6。 使用する Apache Commons

(とりわけ)日付操作に一般的に使用される別のライブラリは、ApacheCommonsです。 これは、 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. 結論

この簡単な記事では、日付を1日増やすという単純なタスクを処理するためのさまざまなアプローチについて説明しました。 JavaのコアAPIといくつかの人気のあるサードパーティライブラリを使用して、これを実現する方法を示しました。

この記事で使用されているコードサンプルは、GitHubにあります。