Java – Duration between two LocalDateTime, Instant

In this article you will see two equivalent ways to find the amount of time between two LocalDateTime based on the selected unit:

  • ChronoUnit between method -> ChronoUnit.DAYS.between( start, end );
  • until method -> start.until( end, ChronoUnit.DAYS );

These methods will also work with OffsetDateTime, ZonedDateTime classes.
Only date related ChronoUnit enums apply for for LocalDate, similarly only time related enums apply for LocalTime.
Not all ChronoUnit enums will work with Instant, but you can convert them to LocalDateTime, ZonedDateTime etc. to find the duration, and then convert them back to Instant.

Example 1: LocalDateTime

class DateTimeExample
{
    public static void main ( String[] args )
    {
        LocalDateTime localDateTime1 = LocalDateTime.now();
        LocalDateTime localDateTime2 = localDateTime1.plusDays( 2 );

        System.out.println( “localDateTime1: ” + localDateTime1 + “, localDateTime2: ” + localDateTime2 );
        System.out.println( “DAYS between: ” + ChronoUnit.DAYS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “DAYS between: ” + localDateTime1.until( localDateTime2, ChronoUnit.DAYS ) );

        System.out.println( “HALF_DAYS between: ” + ChronoUnit.HALF_DAYS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “HOURS between: ” + ChronoUnit.HOURS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “MINUTES between: ” + ChronoUnit.MINUTES.between( localDateTime1, localDateTime2 ) );
        System.out.println( “SECONDS between: ” + ChronoUnit.SECONDS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “MILLIS between: ” + ChronoUnit.MILLIS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “MICROS between: ” + ChronoUnit.MICROS.between( localDateTime1, localDateTime2 ) );
        System.out.println( “NANOS between: ” + ChronoUnit.NANOS.between( localDateTime1, localDateTime2 ) );
    }
}

Output:

localDateTime1: 2021-01-16T16:13:53.720, localDateTime2: 2021-01-18T16:13:53.720
DAYS between: 2
DAYS between: 2
HALF_DAYS between: 4
HOURS between: 48
MINUTES between: 2880
SECONDS between: 172800
MILLIS between: 172800000
MICROS between: 172800000000
NANOS between: 172800000000000

Example 2: Let's try a bigger date range

LocalDateTime localDateTime3 = LocalDateTime.now();|
LocalDateTime localDateTime4 = localDateTime3.plusYears( 100 );

System.out.println( “localDateTime3: ” + localDateTime3 + “, localDateTime4: ” + localDateTime4 );
System.out.println( “MILLENNIA between: ” + ChronoUnit.MILLENNIA.between( localDateTime3, localDateTime4 ) );
System.out.println( “CENTURIES between: ” + ChronoUnit.CENTURIES.between( localDateTime3, localDateTime4 ) );
System.out.println( “DECADES between: ” + ChronoUnit.DECADES.between( localDateTime3, localDateTime4 ) );
System.out.println( “YEARS between: ” + ChronoUnit.YEARS.between( localDateTime3, localDateTime4 ) );
System.out.println( “MONTHS between: ” + ChronoUnit.MONTHS.between( localDateTime3, localDateTime4 ) );
System.out.println( “WEEKS between: ” + ChronoUnit.WEEKS.between( localDateTime3, localDateTime4 ) );

Output:

localDateTime3: 2021-01-16T16:13:53.745, localDateTime4: 2121-01-16T16:13:53.745
MILLENNIA between: 0
CENTURIES between: 1
DECADES between: 10
YEARS between: 100
MONTHS between: 1200
WEEKS between: 5217

Example 3: LocalDate & LocalTime

LocalDate localDate1 = LocalDate.now();
LocalDate localDate2 = localDate1.plusDays( 60 );

System.out.println( “MONTHS between: ” + ChronoUnit.MONTHS.between( localDate1, localDate2 ) );

LocalTime localTime1 = LocalTime.now();
LocalTime localTime2 = localTime1.plusHours( 1 );

System.out.println( “MINUTES between: ” + ChronoUnit.MINUTES.between( localTime1, localTime2 ) );

Output:

MONTHS between: 2
MINUTES between: 60

Example 4: Instant

Instant instant1 = Instant.now();
Instant instant2 = instant1.plus( 2, ChronoUnit.DAYS );

System.out.println( “DAYS between: ” + ChronoUnit.DAYS.between( instant1, instant2 ) );
System.out.println( “DAYS between: ” + instant1.until( instant2, ChronoUnit.DAYS ) );

Output:

DAYS between: 2
DAYS between: 2

Leave a Comment

Your email address will not be published. Required fields are marked *