In this article you will see several examples on how to compare dates in Java 8 and prior to Java 8. A new date time api added in Java 8 in java.time
package.
1. Compare dates without time
LocalDate
is an immutable date-time object that represents a date, often viewed as year-month-day. LocalDate
has following methods to compare Dates in java.
- boolean isBefore(ChronoLocalDate other) – Checks if this date is before the specified date.
- boolean isAfter(ChronoLocalDate other) – Checks if this date is after the specified date.
- boolean isEqual(ChronoLocalDate other) – Checks if this date is equal to the specified date.
- int compareTo(ChronoLocalDate other) – Compares this date to another date.
1.1. An Example to LocalDate.isBefore(), LocalDate.isAfter() , LocalDate.isEqual()
public class Java8CompareDatesDemo { public static void main(String[] args) throws ParseException { LocalDate date1 = LocalDate.parse("2020-03-20"); LocalDate date2 = LocalDate.of(2020, 03, 21); LocalDate date3 = LocalDate.parse("2020-03-21"); System.out.println("date1 : " + date1); System.out.println("date2 : " + date2); System.out.println("date3 : " + date3 + "\n"); System.out.println("Q1: is " + date1 + " older than " + date2 + "?"); System.out.println("A1 " + date1.isBefore(date2)); System.out.println("Q2: is " + date2 + " newer than " + date1 + "?"); System.out.println("A2 " + date2.isAfter(date1)); System.out.println("Q3: is " + date1 + " equals to " + date2 + "?"); System.out.println("A3 " + date1.isEqual(date2)); System.out.println("Q4: is " + date2 + " equals to " + date3 + "?"); System.out.println("A4 " + date2.isEqual(date3)); } }
Output :
date1 : 2020-03-20 date2 : 2020-03-21 date3 : 2020-03-21 Q1: is 2020-03-20 older than 2020-03-21? A1 true Q2: is 2020-03-21 newer than 2020-03-20? A2 true Q3: is 2020-03-20 equals to 2020-03-21? A3 false Q4: is 2020-03-21 equals to 2020-03-21? A4 true
1.2. An Example to LocalDate.compareTo()
date1.compareTo(date2)
returns positive value if date1
comes after date2
, returns negative value if date1
comes before date2
, returns zero (‘0’) if date1
and date2
are same.
public class Java8CompareDatesDemo2 { public static void main(String[] args) throws ParseException { LocalDate date1 = LocalDate.of(2020, 03, 20); LocalDate date2 = LocalDate.of(2020, 03, 21); LocalDate date3 = LocalDate.of(2020, 03, 21); System.out.println("date1 : " + date1); System.out.println("date2 : " + date2); System.out.println("date3 : " + date3 + "\n"); System.out.println("Q1: is " + date1 + " older than " + date2 + "?"); System.out.println("A1 " + (date1.compareTo(date2) < 0)); System.out.println("Q2: is " + date2 + " newer than " + date1 + "?"); System.out.println("A2 " + (date2.compareTo(date1) > 0)); System.out.println("Q3: is " + date1 + " equals to " + date2 + "?"); System.out.println("A3 " + (date1.compareTo(date2) == 0)); System.out.println("Q4: is " + date2 + " equals to " + date3 + "?"); System.out.println("A4 " + (date2.compareTo(date3) == 0)); } }
Output :
date1 : 2020-03-20 date2 : 2020-03-21 date3 : 2020-03-21 Q1: is 2020-03-20 older than 2020-03-21? A1 true Q2: is 2020-03-21 newer than 2020-03-20? A2 true Q3: is 2020-03-20 equals to 2020-03-21? A3 false Q4: is 2020-03-21 equals to 2020-03-21? A4 true
2. Compare dates with time
LocalDateTime LocalDateTime
is an immutable date-time object that represents a date-time, often viewed as year-month-day-hour-minute-second. LocalDateTime
also provide same methods like LocalDate
to compare dates. Following example demonstrates how to compare dates with time in Java 8.
2.1. An Example to LocalDateTime.isBefore(), LocalDateTime.isAfter() , LocalDateTime.isEqual()
public class Java8CompareDatesWithTimeDemo { public static void main(String[] args) throws ParseException { LocalDateTime date1 = LocalDateTime.parse("2020-03-20T17:37:34"); LocalDateTime date2 = LocalDateTime.of(2020, 03, 21, 17, 37, 34); LocalDateTime date3 = LocalDateTime.parse("2020-03-21T17:37:34"); System.out.println("date1 : "+date1); System.out.println("date2 : "+date2); System.out.println("date3 : "+date3+"\n"); System.out.println("Q1: is "+date1 +" older than "+date2+"?"); System.out.println("A1 "+ date1.isBefore(date2)); System.out.println("Q2: is "+date2 +" newer than "+date1+"?"); System.out.println("A2 "+ date2.isAfter(date1)); System.out.println("Q3: is "+date1 +" equals to "+date2+"?"); System.out.println("A3 "+ date1.isEqual(date2)); System.out.println("Q4: is "+date2 +" equals to "+date3+"?"); System.out.println("A4 "+ date2.isEqual(date3)); } }
Output :
date1 : 2020-03-20T17:37:34 date2 : 2020-03-21T17:37:34 date3 : 2020-03-21T17:37:34 Q1: is 2020-03-20T17:37:34 older than 2020-03-21T17:37:34? A1 true Q2: is 2020-03-21T17:37:34 newer than 2020-03-20T17:37:34? A2 true Q3: is 2020-03-20T17:37:34 equals to 2020-03-21T17:37:34? A3 false Q4: is 2020-03-21T17:37:34 equals to 2020-03-21T17:37:34? A4 true
2.2. An Example to LocalDateTime.compareTo()
dateTime1.compareTo(dateTime2)
returns positive value if dateTime1
comes after dateTime2
, returns negative value if dateTime1
comes before dateTime2
, returns zero (‘0’) if dateTime1
and dateTime2
are same.
public class Java8CompareDatesWithTimeDemo2 { public static void main(String[] args) throws ParseException { LocalDateTime date1 = LocalDateTime.of(2020, 03, 20, 17, 37, 34); LocalDateTime date2 = LocalDateTime.of(2020, 03, 21, 17, 37, 34); LocalDateTime date3 = LocalDateTime.of(2020, 03, 21, 17, 37, 34); System.out.println("date1 : "+date1); System.out.println("date2 : "+date2); System.out.println("date3 : "+date3+"\n"); System.out.println("Q1: is " + date1 + " older than " + date2 + "?"); System.out.println("A1 " + (date1.compareTo(date2) < 0)); System.out.println("Q2: is " + date2 + " newer than " + date1 + "?"); System.out.println("A2 " + (date2.compareTo(date1) > 0)); System.out.println("Q3: is " + date1 + " equals to " + date2 + "?"); System.out.println("A3 " + (date1.compareTo(date2) == 0)); System.out.println("Q4: is " + date2 + " equals to " + date3 + "?"); System.out.println("A4 " + (date2.compareTo(date3) == 0)); } }
Output :
date1 : 2020-03-20T17:37:34 date2 : 2020-03-21T17:37:34 date3 : 2020-03-21T17:37:34 Q1: is 2020-03-20T17:37:34 older than 2020-03-21T17:37:34? A1 true Q2: is 2020-03-21T17:37:34 newer than 2020-03-20T17:37:34? A2 true Q3: is 2020-03-20T17:37:34 equals to 2020-03-21T17:37:34? A3 false Q4: is 2020-03-21T17:37:34 equals to 2020-03-21T17:37:34? A4 true
3. Compare Zoned date time
ZonedDateTime is A date-time with a time-zone in the ISO-8601 calendar system, such as 2007-12-03T10:15:30+01:00 Europe/Paris
, implements ChronoZonedDateTime which provides isBefore
, isAfter
, isEquals
and compareTo
methods like LocalDate
and LocalDateTime
classes to compare zoned date time. Let’s have a look into following example.
3.1. An Example to ZonedDateTime.isBefore(), ZonedDateTime.isAfter() , ZonedDateTime.isEqual()
public class Java8CompareZonedDateTimeDemo { public static void main(String[] args) throws ParseException { LocalDateTime date1 = LocalDateTime.parse("2020-03-20T17:37:34.000000500"); LocalDateTime date2 = LocalDateTime.of(2020, 03, 21, 17, 37, 34, 500); ZonedDateTime zdt1 = ZonedDateTime.of(date1, ZoneId.of("America/Phoenix")); ZonedDateTime zdt2 = ZonedDateTime.of(date2, ZoneId.of("America/Phoenix")); ZonedDateTime zdt3 = ZonedDateTime.of(2020, 03, 21, 17, 37, 34, 500, ZoneId.of("America/Phoenix")); System.out.println("zoned date1 : " + zdt1); System.out.println("zoned date2 : " + zdt2); System.out.println("zoned date3 : " + zdt3 + "\n"); System.out.println("Q1: is "+zdt1 +" older than "+zdt2+"?"); System.out.println("A1 "+ zdt1.isBefore(zdt2)); System.out.println("Q2: is "+zdt2 +" newer than "+zdt1+"?"); System.out.println("A2 "+ zdt2.isAfter(zdt1)); System.out.println("Q3: is "+zdt1 +" equals to "+zdt2+"?"); System.out.println("A3 "+ zdt1.isEqual(zdt2)); System.out.println("Q4: is "+zdt2 +" equals to "+zdt3+"?"); System.out.println("A4 "+ zdt2.isEqual(zdt3)); } }
Output :
zoned date1 : 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] zoned date2 : 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] zoned date3 : 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] Q1: is 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] older than 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A1 true Q2: is 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] newer than 2020-03-20T17:37:34.000000500-07:00[America/Phoenix]? A2 true Q3: is 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] equals to 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A3 false Q4: is 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] equals to 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A4 true
3.2. An Example to ZonedDateTime.compareTo()
zonedDateTime1.compareTo(zonedDateTime2)
returns positive value if zonedDateTime1
comes after zonedDateTime2
, returns negative value if zonedDateTime1
comes before zonedDateTime2
, returns zero (‘0’) if zonedDateTime1
and zonedDdateTime2
are same.
public class Java8CompareZonedDateTimeDemo2 { public static void main(String[] args) throws ParseException { ZonedDateTime zdt1 = ZonedDateTime.of(2020, 03, 20, 17, 37, 34, 500, ZoneId.of("America/Phoenix")); ZonedDateTime zdt2 = ZonedDateTime.of(2020, 03, 21, 17, 37, 34, 500, ZoneId.of("America/Phoenix")); ZonedDateTime zdt3 = ZonedDateTime.of(2020, 03, 21, 17, 37, 34, 500, ZoneId.of("America/Phoenix")); System.out.println("zoned date1 : " + zdt1); System.out.println("zoned date2 : " + zdt2); System.out.println("zoned date3 : " + zdt3 + "\n"); System.out.println("Q1: is " + zdt1 + " older than " + zdt2 + "?"); System.out.println("A1 " + (zdt1.compareTo(zdt2) < 0)); System.out.println("Q2: is " + zdt2 + " newer than " + zdt1 + "?"); System.out.println("A2 " + (zdt2.compareTo(zdt1) > 0)); System.out.println("Q3: is " + zdt1 + " equals to " + zdt2 + "?"); System.out.println("A3 " + (zdt1.compareTo(zdt2) == 0)); System.out.println("Q4: is " + zdt2 + " equals to " + zdt3 + "?"); System.out.println("A4 " + (zdt2.compareTo(zdt3) == 0)); } }
Output :
zoned date1 : 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] zoned date2 : 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] zoned date3 : 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] Q1: is 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] older than 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A1 true Q2: is 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] newer than 2020-03-20T17:37:34.000000500-07:00[America/Phoenix]? A2 true Q3: is 2020-03-20T17:37:34.000000500-07:00[America/Phoenix] equals to 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A3 false Q4: is 2020-03-21T17:37:34.000000500-07:00[America/Phoenix] equals to 2020-03-21T17:37:34.000000500-07:00[America/Phoenix]? A4 true
4. Conclusion
In this guide we have covered how to compare dates in Java 8, compare dates with time and with out time and comparing zoned date time. If you would like to compare OffsetDateTime, it also provides isAfter()
, isBefore()
, isEqual()
and compareTo()
methods to compare offset date time.