Javaで日付の範囲を反復処理する
1. 概要
このクイックチュートリアルでは、開始日と終了日を使用して、Java 7、Java 8、およびJava 9で日付範囲を反復処理するいくつかの方法を学習します。
2. Java 7
Java 7以降、we’ll use the class java.util.Date for holding the date values and java.util.Calendar for incrementing from one date to the next.
単純な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以降、we can use the new Java 8 Date API。 これにより、自己処理、不変、流fluent、およびスレッドセーフなオブジェクトが得られます。 また、日付をインクリメントするためのjava.util.Calendarのようなallows us to write cleaner code without the need for a helper classもあります。
単純なforループ、LocalDateクラス、およびメソッドplusDays(1)を使用して、日付の範囲を進めましょう。
void iterateBetweenDatesJava8(LocalDate start, LocalDate end) {
for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
processDate(date);
}
}
ここで注目に値するのは、although the Stream API is available beginning in Java 8, iterating between two dates using the Date API in conjunction with the Stream API isn’t possible until Java 9です。
Java 8 Date APIの詳細については、this articleを確認してください。
4. Java 9
Java 9 introduces the method datesUntil, which lets us use the Stream APIは、開始日から終了日まで繰り返します。
この機能を利用するために、サンプルコードを更新しましょう。
void iterateBetweenDatesJava9(LocalDate start, LocalDate end) {
start.datesUntil(end).forEach(this::processDate);
}
5. 結論
この簡単な記事で見たように、Javaでは、ある範囲の日付を反復処理するのは簡単な作業です。 これは、Date APIで日付をより簡単に処理できるJava 8以降を使用する場合に特に当てはまります。
Java 7以前では、日付のみを使用している場合でも、日付と時刻の両方を処理することをお勧めします。
ただし、Java 8以降では、必要に応じて、Date APIからLocalDate,LocalDateTime,やその他のオプションなどの適切なクラスを選択できるという利点があります。
そしてもちろん、Java 9以降では、Date APIとともにStream APIを使用して、日付のストリームを繰り返すことができます。
いつものように、コードスニペットはover on GitHubにあります。