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:

Write/Read cookies using HTTP and Read a file from the internet
Java Program to Implement Hamiltonian Cycle Algorithm
A Guide to the ResourceBundle
Guide to the Fork/Join Framework in Java
Spring Boot - Tomcat Deployment
Spring 5 WebClient
Sort a HashMap in Java
Thao tác với tập tin và thư mục trong Java
Java Program to Find Nearest Neighbor for Static Data Set
A Guide to JUnit 5
Constructor Dependency Injection in Spring
Java Program to Perform the Unique Factorization of a Given Number
What is Thread-Safety and How to Achieve it?
Java Program to Implement the linear congruential generator for Pseudo Random Number Generation
Hướng dẫn Java Design Pattern – Proxy
A Guide to Iterator in Java
Java Program to Find SSSP (Single Source Shortest Path) in DAG (Directed Acyclic Graphs)
Java Program to Implement Stein GCD Algorithm
Vector trong Java
Java Program to Implement Hash Tables Chaining with Doubly Linked Lists
Java 14 Record Keyword
Hướng dẫn Java Design Pattern – Dependency Injection
Converting String to Stream of chars
Java Program to Perform Encoding of a Message Using Matrix Multiplication
Rate Limiting in Spring Cloud Netflix Zuul
Java Program to Implement Sorting of Less than 100 Numbers in O(n) Complexity
Documenting a Spring REST API Using OpenAPI 3.0
Giới thiệu Google Guice – Aspect Oriented Programming (AOP)
Sorting Query Results with Spring Data
Apache Camel with Spring Boot
Java Program to Implement Find all Cross Edges in a Graph
Java Program to Implement Merge Sort Algorithm on Linked List