Java中比较日期
在这篇文章中,有一些Java程序可以比较Java中的日期,我们可以使用Date类方法,Calendar类方法以及Java 8中使用LocalDate,LocalTime和LocalDateTime类中的方法的选项。
比较java.util.Date
如果我们有两个Date实例,并且想要比较它们,则Date类中可以使用的方法是-
compareTo(Date anotherDate)–比较两个日期以进行排序。如果参数Date等于此Date,则返回0;否则,返回0。如果此Date在传递的Date参数之前,则小于0的值;如果此Date在Date参数之后,则返回大于0的值。
equals(Object obj)–比较两个日期是否相等。当且仅当参数不为null并且是一个Date对象,该Date对象表示与该对象相同的时间点(以毫秒为单位)时,结果为true。
after(Date when)–测试此日期是否在指定日期之后。如果此Date对象表示的时刻严格晚于when表示的时刻,则返回true。否则为假。
before(Date when)–测试此日期是否在指定日期之前。当且仅当此Date对象表示的时刻严格早于when表示的时刻时,才返回true。否则为假。
public class CompareDates { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dt1 = sdf.parse("2019-10-27"); Date dt2 = sdf.parse("2019-08-20"); System.out.println("Date1 is- "+ sdf.format(dt1)); System.out.println("Date2 is- "+ sdf.format(dt2)); compareDates(dt1, dt2); } private static void compareDates(Date dt1, Date dt2) { if(dt1.compareTo(dt2) > 0) { System.out.println("Date1 comes after date2"); }else if(dt1.compareTo(dt2) < 0) { System.out.println("Date1 comes before date2"); }else { System.out.println("Date1 equals date2"); } // Using after method if(dt1.after(dt2)) { System.out.println("Date1 comes after date2"); }else { System.out.println("Date1 comes before date2"); } // Using before method if(dt1.before(dt2)) { System.out.println("Date1 comes before date2"); }else { System.out.println("Date1 comes after date2"); } //using equals method if(dt1.equals(dt2)) { System.out.println("Date1 equals date2"); }else { System.out.println("Date1 is not equal to date2"); } } }
输出量
Date1 is- 2019-10-27 Date2 is- 2019-08-20 Date1 comes after date2 Date1 comes after date2 Date1 comes after date2 Date1 is not equal to date2
比较java.util.Calendar
如果我们有Calendar实例,则可以用比较Date实例的方式比较它们。在Calendar类中,也有类似的方法compareTo,equals,after,before。
public class CompareDates { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date dt1 = sdf.parse("2018-09-27"); Date dt2 = sdf.parse("2019-08-20"); Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(dt1); cal2.setTime(dt2); System.out.println("Date1 is- "+ sdf.format(cal1.getTime())); System.out.println("Date2 is- "+ sdf.format(cal2.getTime())); compareDates(cal1, cal2); } // Comparing Calendar instances private static void compareDates(Calendar cal1, Calendar cal2) { if(cal1.compareTo(cal2) > 0) { System.out.println("Date1 comes after date2"); }else if(cal1.compareTo(cal2) < 0) { System.out.println("Date1 comes before date2"); }else { System.out.println("Date1 equals date2"); } // Using after method if(cal1.after(cal2)) { System.out.println("Date1 comes after date2"); }else { System.out.println("Date1 comes before date2"); } // Using before method if(cal1.before(cal2)) { System.out.println("Date1 comes before date2"); }else { System.out.println("Date1 comes after date2"); } //using equals method if(cal1.equals(cal2)) { System.out.println("Date1 equals date2"); }else { System.out.println("Date1 is not equal to date2"); } } }
输出量
Date1 is- 2018-09-27 Date2 is- 2019-08-20 Date1 comes before date2 Date1 comes before date2 Date1 comes before date2 Date1 is not equal to date2
在Java中比较LocalDate
从Java 8开始,我们可以使用新的Date and Time API中的类来比较Java中的日期。这是使用LocalDate实例的示例。 LocalTime和LocalDateTime类中也有类似的方法。
为了比较两个LocalDate实例,有以下方法:
compareTo(ChronoLocalDate other)–将此日期与另一个日期进行比较。返回比较器值,如果小于则返回负数,如果大于则返回正数。
isAfter(ChronoLocalDate other)–检查该日期是否在指定的日期之后。如果此日期晚于指定日期,则返回true。
isBefore(ChronoLocalDate other)–检查此日期是否在指定日期之前。如果此日期早于指定日期,则返回true。
isEqual(ChronoLocalDate other)–检查此日期是否等于指定的日期。如果此日期等于指定的日期,则返回true。
public class CompareDates { public static void main(String[] args) { LocalDate ld1 = LocalDate.of(2019, Month.OCTOBER, 18); LocalDate ld2 = LocalDate.of(2019, Month.SEPTEMBER, 20); System.out.println(ld1.compareTo(ld2)); System.out.println(ld2.compareTo(ld1)); System.out.println(ld1.isAfter(ld2)); System.out.println(ld1.isBefore(ld2)); System.out.println(ld1.isEqual(ld2)); } }
输出量
1 -1 true false false