How to Get All Dates Between Two Dates?

1. Overview

The new Time API introduced in Java 8 made it possible to process date and time without using external libraries.

In this short tutorial, we will take a look at how getting all dates between two dates become easier over the time in different versions of Java.

2. Using Java 7

In Java 7, One way to calculate it is using Calendar instance, running a loop and adding 1 day in each iteration using add method and Calendar.Date field unit it reaches the end date.

Here is the code demonstrating it – using Calendar instance:

public static List<Date> getDatesBetweenUsingJava7(
  Date startDate, Date endDate) {
    List<Date> datesInRange = new ArrayList<>();
    Calendar calendar = new GregorianCalendar();
    calendar.setTime(startDate);
    
    Calendar endCalendar = new GregorianCalendar();
    endCalendar.setTime(endDate);

    while (calendar.before(endCalendar)) {
        Date result = calendar.getTime();
        datesInRange.add(result);
        calendar.add(Calendar.DATE, 1);
    }
    return datesInRange;
}

3. Using Java 8

In Java 8, we can now create a continuous infinite Stream of dates and take only the relevant part. Unfortunately, there is no way of terminating an infinite Stream when a predicate gets matched – this is why we need to calculate the number of days between those two days and then simply limit() the Stream:

public static List<LocalDate> getDatesBetweenUsingJava8(
  LocalDate startDate, LocalDate endDate) { 
 
    long numOfDaysBetween = ChronoUnit.DAYS.between(startDate, endDate); 
    return IntStream.iterate(0, i -> i + 1)
      .limit(numOfDaysBetween)
      .mapToObj(i -> startDate.plusDays(i))
      .collect(Collectors.toList()); 
}

Notice how, first, we can get the difference of days between two dates using the between function – associated with DAYS constant of ChronoUnit enumeration.

Then we create a Stream of integers representing the number of days since the starting date. In the next step, we convert our integers to LocalDate objects using the plusDays() API.

Finally, we collect everything into a list instance.

4. Using Java 9

Finally, Java 9 brings dedicated methods for calculating this:

public static List<LocalDate> getDatesBetweenUsingJava9(
  LocalDate startDate, LocalDate endDate) {
 
    return startDate.datesUntil(endDate)
      .collect(Collectors.toList());
}

We can get the dates between two dates with single method call using the dedicated datesUntil method of a LocalDate class. The datesUntill returns the sequentially ordered Stream of dates starting from the date object whose method is called to the date given as method argument.

5. Conclusion

In this quick article, we looked at how can we get all dates between two dates using the different versions of Java.

We discussed how Time API introduced in Java 8 release made it easier to run operations over date literals and in Java 9, it can be done by just calling datesUntil.

And, as always, the code snippets can be found over on GitHub.

Related posts:

Getting Started with GraphQL and Spring Boot
Java Program to Compute DFT Coefficients Directly
Giới thiệu Java 8
Deploy a Spring Boot WAR into a Tomcat Server
Java Program to Perform Stooge Sort
Java Program to Check Cycle in a Graph using Topological Sort
Query Entities by Dates and Times with Spring Data JPA
Java Program to Check Whether Topological Sorting can be Performed in a Graph
Spring Boot - Rest Controller Unit Test
Jackson vs Gson
Thao tác với tập tin và thư mục trong Java
Spring Boot - Cloud Configuration Server
Serve Static Resources with Spring
Java Program to Solve the Fractional Knapsack Problem
Java Program to Implement Best-First Search
A Quick JUnit vs TestNG Comparison
Java Program to Implement Dijkstra’s Algorithm using Priority Queue
An Intro to Spring Cloud Vault
Java Program to Find k Numbers Closest to Median of S, Where S is a Set of n Numbers
Spring Boot Gradle Plugin
Java – Rename or Move a File
Chuyển đổi Array sang ArrayList và ngược lại
Assertions in JUnit 4 and JUnit 5
Java Program to Compute Determinant of a Matrix
Java Program to Implement HashTable API
Introduction to Spring Cloud CLI
Giới thiệu SOAP UI và thực hiện test Web Service
Hướng dẫn sử dụng biểu thức chính quy (Regular Expression) trong Java
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Toán tử instanceof trong java
Java Program to do a Breadth First Search/Traversal on a graph non-recursively
An Introduction to Java.util.Hashtable Class