The following code snippet shows you how to iterate through a range of dates in Java. We use the Java Date Time API. We do increment and decrement iteration using a simple for
loop.
Here are the steps:
- We declare the
start
andend
date of the loop, the dates are instance ofjava.time.LocalDate
. - Create a for loop.
- In the for loop we set the initialization variable the
start
date. - The loop executed if the date is less than
end
date, using theisBefore()
method, otherwise it will be terminated. - The date will be incremented by 1 on each loop.
package org.kodejava.datetime;
import java.time.LocalDate;
import java.time.format.TextStyle;
import java.util.Locale;
public class DateIteration {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2023, 10, 1);
LocalDate end = LocalDate.of(2023, 10, 8);
System.out.println("Start = " + start);
System.out.println("End = " + end);
System.out.println("--------------------");
for (LocalDate date = start; date.isBefore(end); date = date.plusDays(1)) {
System.out.printf("Date %tD is %s%n", date, date.getDayOfWeek());
}
System.out.println("--------------------");
for (LocalDate date = end; date.isAfter(start); date = date.minusDays(1)) {
System.out.printf("Date %tD is %s%n", date, date.getDayOfWeek()
.getDisplayName(TextStyle.SHORT, Locale.getDefault()));
}
}
}
Running the code snippet gives you the following output:
Start = 2023-10-01
End = 2023-10-08
--------------------
Date 10/01/23 is SUNDAY
Date 10/02/23 is MONDAY
Date 10/03/23 is TUESDAY
Date 10/04/23 is WEDNESDAY
Date 10/05/23 is THURSDAY
Date 10/06/23 is FRIDAY
Date 10/07/23 is SATURDAY
--------------------
Date 10/08/23 is Sun
Date 10/07/23 is Sat
Date 10/06/23 is Fri
Date 10/05/23 is Thu
Date 10/04/23 is Wed
Date 10/03/23 is Tue
Date 10/02/23 is Mon
Next, we are going to use while
loop.
- Define the start and end date to loop
- We increment the
start
date by 1 day. - Execute the loop if the
start
date is beforeend
date.
package org.kodejava.datetime;
import java.time.LocalDate;
public class WhileDateIteration {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2023, 10, 1).minusDays(1);
LocalDate end = LocalDate.of(2023, 10, 8);
while ((start = start.plusDays(1)).isBefore(end)) {
System.out.printf("Date %tD is %s%n", start, start.getDayOfWeek());
}
}
}
The result of the code snippet above is:
Date 10/01/23 is SUNDAY
Date 10/02/23 is MONDAY
Date 10/03/23 is TUESDAY
Date 10/04/23 is WEDNESDAY
Date 10/05/23 is THURSDAY
Date 10/06/23 is FRIDAY
Date 10/07/23 is SATURDAY
To use the Java stream, we can do it like the following code snippet:
package org.kodejava.datetime;
import java.time.LocalDate;
import java.time.temporal.ChronoUnit;
import java.util.stream.Stream;
public class StreamDateIteration {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2023, 10, 1);
LocalDate end = LocalDate.of(2023, 10, 8);
Stream.iterate(start, date -> date.plusDays(1))
.limit(ChronoUnit.DAYS.between(start, end))
.forEach(date -> {
System.out.printf("Date %tD is %s%n", date, date.getDayOfWeek());
});
}
}
The result of the code snippet above is:
Date 10/01/23 is SUNDAY
Date 10/02/23 is MONDAY
Date 10/03/23 is TUESDAY
Date 10/04/23 is WEDNESDAY
Date 10/05/23 is THURSDAY
Date 10/06/23 is FRIDAY
Date 10/07/23 is SATURDAY
From Java 9 we can use LocalDate.datesUntil()
method. It will iterate from the date to the specified end date by increment step of 1 day or the specified increment of Period
.
package org.kodejava.datetime;
import java.time.LocalDate;
import java.time.Period;
public class DatesUntilDateIteration {
public static void main(String[] args) {
LocalDate start = LocalDate.of(2023, 10, 1);
LocalDate end = LocalDate.of(2023, 10, 8);
start.datesUntil(end).forEach(date -> {
System.out.printf("Date %tD is %s%n", date, date.getDayOfWeek());
});
start.datesUntil(end, Period.ofDays(2)).forEach(System.out::println);
}
}
Running the code snippet produces the following result:
Date 10/01/23 is SUNDAY
Date 10/02/23 is MONDAY
Date 10/03/23 is TUESDAY
Date 10/04/23 is WEDNESDAY
Date 10/05/23 is THURSDAY
Date 10/06/23 is FRIDAY
Date 10/07/23 is SATURDAY
2023-10-01
2023-10-03
2023-10-05
2023-10-07
Latest posts by Wayan (see all)
- How do I get number of each day for a certain month in Java? - September 8, 2024
- How do I get operating system process information using ProcessHandle? - July 22, 2024
- How do I sum a BigDecimal property of a list of objects using Java Stream API? - July 22, 2024