1概要

このクイックチュートリアルでは、開始日と終了日を使用して、Java 7、Java 8、およびJava 9で、日付の範囲を反復するいくつかの方法を学習します。


2 Java 7

Java 7以降、** 日付の値を保持するためにクラス

java.util.Date

を使用し、ある日付から次の日付まで増分するために

java.util.Calendar

を使用します。

簡単な

while

ループと

java.util.Date

および

java.util.Calendar

クラスを使った例を見てみましょう。

void iterateBetweenDatesJava7(Date start, Date end) {
    Date current = start;

    while (current.before(end)) {
        processDate(current);

        Calendar calendar = Calendar.getInstance();
        calendar.setTime(current);
        calendar.add(Calendar.DATE, 1);
        current = calendar.getTime();
    }
}

3. Java 8

Java 8以降、新しいJava 8 Date APIを使用できます。これは私達に自己処理、不変、流暢、そしてスレッドセーフなオブジェクトを与えます。また、日付をインクリメントするための

java.util.Calendar

のようなヘルパークラスを必要とせずに、よりクリーンなコードを書くこともできます。

単純な

for

ループ、

LocalDate

クラス、およびメソッド

plusDays(1)

を使用して、日付の範囲を進めます。

void iterateBetweenDatesJava8(LocalDate start, LocalDate end) {
    for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
        processDate(date);
    }
}

ここで注目に値するのは、Stream APIはJava 8以降で利用可能ですが、Stream APIと組み合わせてDate APIを使用して2つの日付を繰り返すことは、Java 9まで不可能なことです。

Java 8 Date APIの詳細については、https://www.baeldung.com/java-8-date-time-intro[この記事]を参照してください。

4. Java 9

  • Java 9では__datesUntilメソッドが導入されています。これにより、Stream APIを使用して開始日から終了日までを繰り返すことができます。

この機能を利用するためにサンプルコードを更新しましょう。

void iterateBetweenDatesJava9(LocalDate start, LocalDate end) {
    start.datesUntil(end).forEach(this::processDate);
}


5結論

この簡単な記事で見たように、日付範囲を反復することはJavaの簡単な作業です。これは、Date APIを使用して日付をより簡単に処理できるJava 8以降を使用している場合に特に当てはまります。

Java 7以前では、日付のみを使用している場合でも、日付と時刻の両方を扱うことをお勧めします。

ただし、Java 8以降では、

LocalDate、


LocalDateTime、

、およびその他のオプションなど、Date APIから適切なクラスを選択するという利点があります。

そしてもちろん、Java 9以降では、Stream APIをDate APIと組み合わせて使用​​して日付のストリームを繰り返すことができます。

いつものように、コードスニペットはhttps://github.com/eugenp/tutorials/tree/master/core-java-9[GitHub上で動く]にあります。