Javaでの増分日

Javaでの増分日

1. 概要

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

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 classは不変の日時表現であり、多くの場合、年-月-日と見なされます。

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

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

この例では、java.time.LocalDate classとその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の使用

もう1つのアプローチは、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 isがあり、予想される日付形式が使用されていることを確認します。 日付は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 classには、日付と時刻を適切に処理するのに役立つ多くのメソッドがあります。

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

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

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

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

@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 classとその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といくつかの人気のあるサードパーティライブラリを使用してそれを実現する方法を示しました。

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