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:

Java Program to Implement Double Ended Queue
String Joiner trong Java 8
Java Program to Check whether Graph is a Bipartite using 2 Color Algorithm
Posting with HttpClient
Java Perform to a 2D FFT Inplace Given a Complex 2D Array
Java Program to Check if a Point d lies Inside or Outside a Circle Defined by Points a, b, c in a Pl...
Testing an OAuth Secured API with Spring MVC
Java Program to Implement WeakHashMap API
Logout in an OAuth Secured Application
Java Program to Implement CopyOnWriteArrayList API
Adding Parameters to HttpClient Requests
Ways to Iterate Over a List in Java
So sánh HashMap và HashSet trong Java
Converting a Stack Trace to a String in Java
Spring @RequestParam Annotation
Java Program to Find the Connected Components of an UnDirected Graph
Java Program to Represent Graph Using Adjacency List
Spring Cloud AWS – S3
Java Program to Find Nearest Neighbor for Static Data Set
Spring MVC Setup with Kotlin
Java Program to Find Median of Elements where Elements are Stored in 2 Different Arrays
Java Program to Implement Extended Euclid Algorithm
Java Convenience Factory Methods for Collections
Java Program to implement Dynamic Array
Binary Numbers in Java
Java Program to Check Whether a Directed Graph Contains a Eulerian Cycle
Java Program to Implement RenderingHints API
Java Program to Find the Shortest Path from Source Vertex to All Other Vertices in Linear Time
SOAP Web service: Upload và Download file sử dụng MTOM trong JAX-WS
Java Timer
Hướng dẫn Java Design Pattern – Proxy
Java Program to Implement Fermat Factorization Algorithm