Java中比较日期

时间:2020-01-09 10:35:24  来源:igfitidea点击:

在这篇文章中,有一些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