1. Introduction
Java 9 introduced a new method called datesUntil() in the LocalDate class. This method returns a stream of dates between the given start and end dates. In this article, we will look at how to use the datesUntil() method to get dates in Java 9.
2. LocalDate Class
The LocalDate class is a part of the java.time package introduced in Java 8. It represents a date without a time-zone in the ISO-8601 calendar system. We can create a LocalDate object using the now() method or by passing the year, month, and day as arguments to the of() method.
2.1 Creating a LocalDate Object
Let's look at an example of creating a LocalDate object using the now() method:
LocalDate date = LocalDate.now();
System.out.println(date);
The above code will output the current date in the ISO-8601 format.
We can also create a LocalDate object by passing the year, month, and day as arguments to the of() method:
LocalDate date = LocalDate.of(2022, 1, 1);
System.out.println(date);
The above code will output the date "2022-01-01" in the ISO-8601 format.
3. Using datesUntil()
The datesUntil() method returns a stream of dates between the given start and end dates. It takes two arguments - the start date and the end date. Both start and end dates are inclusive. Let's look at an example:
LocalDate startDate = LocalDate.of(2022, 1, 1);
LocalDate endDate = LocalDate.of(2022, 1, 31);
startDate.datesUntil(endDate).forEach(System.out::println);
The above code will output all the dates between "2022-01-01" and "2022-01-31" inclusive.
3.1 Excluding the End Date
We can exclude the end date from the stream by passing an additional argument of the Exclusion enum. Let's look at an example:
LocalDate startDate = LocalDate.of(2022, 1, 1);
LocalDate endDate = LocalDate.of(2022, 1, 31);
startDate.datesUntil(endDate, Period.ofDays(1), Exclusion.INCLUSIVE)
.forEach(System.out::println);
The above code will output all the dates between "2022-01-01" and "2022-01-31" inclusive.
3.2 Specifying the Period Between Dates
We can specify the period between the dates using the Period class. Let's look at an example of getting all the dates between "2022-01-01" and "2022-12-31" with a period of 1 month:
LocalDate startDate = LocalDate.of(2022, 1, 1);
LocalDate endDate = LocalDate.of(2022, 12, 31);
startDate.datesUntil(endDate, Period.ofMonths(1))
.forEach(System.out::println);
The above code will output all the dates between "2022-01-01" and "2022-12-31" with a period of 1 month.
3.3 Filtering the Dates
We can also filter the dates using a predicate. Let's look at an example of getting all the Fridays between "2022-01-01" and "2022-12-31":
LocalDate startDate = LocalDate.of(2022, 1, 1);
LocalDate endDate = LocalDate.of(2022, 12, 31);
startDate.datesUntil(endDate, Period.ofDays(1))
.filter(date -> date.getDayOfWeek() == DayOfWeek.FRIDAY)
.forEach(System.out::println);
The above code will output all the Fridays between "2022-01-01" and "2022-12-31".
4. Conclusion
The datesUntil() method is a useful addition to the LocalDate class in Java 9. It allows us to get a stream of dates between the given start and end dates with different periods and filters. We can use it in various use cases like generating reports, scheduling tasks, etc.