1概要

Java 8で導入された新しいTime APIは、外部ライブラリを使用せずに日付と時刻を処理することを可能にしました。

この短いチュートリアルでは、2つの日付の間のすべての日付を取得することが、さまざまなバージョンのJavaでどのように簡単になるかを見ていきます。


2 Java 7

を使う

Java 7では、これを計算する1つの方法は、

Calendar

インスタンスを使用してループを実行し、addメソッドと

Calendar.Date

フィールド単位を使用して各反復に1日を追加して終了日に達することです。

これを実演するコードは次のとおりです –

Calendar

インスタンスを使用します。

public static List<Date> getDatesBetweenUsingJava7(
  Date startDate, Date endDate) {
    List<Date> datesInRange = new ArrayList<>();
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(startDate);

    Calendar endCalendar = new GregorianCalendar();
    endCalendar.setTime(endDate);

    while (calendar.before(endCalendar)) {
        Date result = calendar.getTime();
        datesInRange.add(result);
        calendar.add(Calendar.DATE, 1);
    }
    return datesInRange;
}


3 Java 8

を使用する

Java 8では、日付の連続した無限

Stream

を作成し、関連部分のみを取ることができます。残念ながら、

述語が一致したときに無限の

Stream

を終了する方法はありません

– そのため、この2日間の日数を計算してから

limit()

Streamを単純に計算する必要があります。

public static List<LocalDate> getDatesBetweenUsingJava8(
  LocalDate startDate, LocalDate endDate) {

    long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate);
    return IntStream.iterate(0, i -> i + 1)
      .limit(numOfDaysBetween)
      .mapToObj(i -> startDate.plusDays(i))
      .collect(Collectors.toList());
}

最初に、

ChronoUnit

列挙の

DAYS

定数に関連付けられた

between

関数を使用して、2つの日付間の日数の差を取得する方法に注目してください。

次に、開始日からの日数を表す整数の

Stream

を作成します。次のステップでは、

plusDays()

APIを使用して、整数を

LocalDate

オブジェクトに変換します。

最後に、すべてを集めてリストインスタンスにします。


4 Java 9

を使用する

最後に、Java 9はこれを計算するための専用メソッドを持っています。

public static List<LocalDate> getDatesBetweenUsingJava9(
  LocalDate startDate, LocalDate endDate) {

    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}


LocalDate

クラスの専用の

datesUntil

メソッドを使用して、単一のメソッド呼び出しで2つの日付の間の日付を取得できます。

datesUntill

は、メソッドが呼び出されたdateオブジェクトから、method引数として与えられた日付までの、日付順に並べられた

Stream

を返します。


5結論

このクイック記事では、異なるバージョンのJavaを使用して、2つの日付の間のすべての日付を取得する方法について説明しました。

Java 8リリースで導入されたTime APIが日付リテラル上で操作を実行することをどのようにして容易にしたか、そしてJava 9では

datesUntil.

を呼び出すだけでそれを実行できることを説明しました。

そして、いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/java-dates[over the GitHub]にあります。