I have two dates:
Start date: "2022-03-14" End date: "2022-04-15"
I want the result = 1 (for the date, 2022-04-01)
Advertisement
Answer
tl;dr
LocalDate.parse( "2022-03-14" ).datesUntil( LocalDate.parse( "2022-04-15" ) ).filter( localDate -> localDate.getDayOfMonth() == 1 ).count()
See this code run live at IdeOne.com.
1
Details
First, parse the inputs as LocalDate objects.
LocalDate start = LocalDate.parse( "2022-03-14" ); LocalDate end = LocalDate.parse( "2022-04-15" );
The LocalDate#datesUntil method creates a stream of LocalDate objects between the two values. We can filter that stream to keep only the ones whose day-of-month is 1 (the first of the month). Then we ask for a count of those filtered objects.
long countFirstOfMonths =
start
.datesUntil( end )
.filter( localDate -> localDate.getDayOfMonth() == 1 )
.count();
Report.
String message = String.format( "From %s to %s contains %d first-of-month dates." , start.toString() , end.toString() , countFirstOfMonths ); System.out.println( message );