Comparison

About

In Java, comparing dates and times is a common task — for example, to check if a deadline has passed, to sort events chronologically, or to filter records within a time range.

Java provides multiple date-time APIs, and the comparison techniques vary slightly based on the API being used.

The most commonly used classes for date and time comparison are:

  • java.util.Date (legacy)

  • java.time.LocalDate, LocalDateTime, ZonedDateTime (Java 8+)

java.util.Date

Methods

  • compareTo(Date anotherDate)

  • before(Date when)

  • after(Date when)

  • equals(Object obj)

Example

import java.util.Date;

Date now = new Date();
Date future = new Date(now.getTime() + 10000); // 10 seconds later

System.out.println(now.before(future));       // true
System.out.println(now.after(future));        // false
System.out.println(now.compareTo(future));    // -1
System.out.println(now.equals(future));       // false

java.util.Calendar

Methods

  • compareTo(Calendar other)

  • before(Object when)

  • after(Object when)

  • equals(Object obj)

Example

import java.util.Calendar;

Calendar c1 = Calendar.getInstance();
Calendar c2 = Calendar.getInstance();
c2.add(Calendar.HOUR, 1); // 1 hour later

System.out.println(c1.before(c2));            // true
System.out.println(c1.after(c2));             // false
System.out.println(c1.compareTo(c2));         // -1

java.sql.Timestamp

Methods

  • Inherits from java.util.Date

  • Compares including nanoseconds

Example

import java.sql.Timestamp;

Timestamp t1 = new Timestamp(System.currentTimeMillis());
Timestamp t2 = new Timestamp(t1.getTime() + 5000); // 5 seconds later

System.out.println(t1.before(t2));             // true
System.out.println(t1.after(t2));              // false
System.out.println(t1.compareTo(t2));          // -1

java.time (Java 8 and later)

java.time.LocalDate

Example

import java.time.LocalDate;

LocalDate d1 = LocalDate.of(2024, 1, 1);
LocalDate d2 = LocalDate.of(2024, 12, 31);

System.out.println(d1.isBefore(d2));          // true
System.out.println(d1.isAfter(d2));           // false
System.out.println(d1.compareTo(d2));         // -1
System.out.println(d1.isEqual(d2));           // false

java.time.LocalTime

Example

import java.time.LocalTime;

LocalTime t1 = LocalTime.of(10, 0);
LocalTime t2 = LocalTime.of(14, 30);

System.out.println(t1.isBefore(t2));          // true
System.out.println(t1.isAfter(t2));           // false
System.out.println(t1.compareTo(t2));         // -1

java.time.LocalDateTime

Example

import java.time.LocalDateTime;

LocalDateTime dt1 = LocalDateTime.of(2024, 6, 1, 10, 0);
LocalDateTime dt2 = LocalDateTime.of(2024, 6, 1, 12, 0);

System.out.println(dt1.isBefore(dt2));        // true
System.out.println(dt1.compareTo(dt2));       // -1

java.time.ZonedDateTime

Example

import java.time.ZonedDateTime;
import java.time.ZoneId;

ZonedDateTime z1 = ZonedDateTime.now(ZoneId.of("UTC"));
ZonedDateTime z2 = ZonedDateTime.now(ZoneId.of("Asia/Kolkata"));

System.out.println(z1.isBefore(z2));          // depends on actual time
System.out.println(z1.compareTo(z2));         // positive or negative

java.time.OffsetDateTime

Example

import java.time.OffsetDateTime;
import java.time.ZoneOffset;

OffsetDateTime o1 = OffsetDateTime.now(ZoneOffset.UTC);
OffsetDateTime o2 = OffsetDateTime.now(ZoneOffset.ofHours(5));

System.out.println(o1.isBefore(o2));          // depends on system time
System.out.println(o1.compareTo(o2));         // depends on offset difference

java.time.instant

Example

import java.time.Instant;

Instant i1 = Instant.now();
Instant i2 = i1.plusSeconds(60); // 1 minute later

System.out.println(i1.isBefore(i2));          // true
System.out.println(i1.compareTo(i2));         // -1

java.time.duration

Example

import java.time.Duration;
import java.time.LocalTime;

LocalTime start = LocalTime.of(9, 0);
LocalTime end = LocalTime.of(11, 0);

Duration d1 = Duration.between(start, end);
Duration d2 = Duration.ofHours(3);

System.out.println(d1.compareTo(d2));         // -1 (2h < 3h)
System.out.println(d1.isZero());              // false
System.out.println(d1.isNegative());          // false

java.time.period

Example

import java.time.LocalDate;
import java.time.Period;

LocalDate today = LocalDate.of(2024, 1, 1);
LocalDate future = LocalDate.of(2025, 1, 1);

Period p1 = Period.between(today, future);
Period p2 = Period.ofMonths(6);

System.out.println(p1.compareTo(p2));         // 1 (12 months > 6)
System.out.println(p1.isZero());              // false
System.out.println(p1.isNegative());          // false

Last updated

Was this helpful?