在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。
本文主要介绍以下五种方式:
- 使用 Date.compareTo()
- 使用 Date.before()、Date.after() 和 Date.equals()
- 使用 Calender.before()、Calender.after() 和 Calender.equals()
- 使用 getTime()
- 使用 Java 8 的 isBefore()、isAfter()、isEqual() 和 compareTo()
Date.compareTo()
Date 实现了 Comparable<date>,因此两个日期可以直接用 compareTo 方法进行比较。</date>
- 如果两个日期相等,则返回值为0。
- 如果 Date1 在 Date2 参数之后,则返回值大于0。
- 如果 Date1 在 Date2 参数之前,则返回值小于0。
package com.wupx.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2019-10-01"); Date date2 = sdf.parse("2019-10-17"); System.out.println("date1 : " + sdf.format(date1)); System.out.println("date2 : " + sdf.format(date2)); if (date1.compareTo(date2) > 0) { System.out.println("Date1 is after Date2"); } else if (date1.compareTo(date2) < 0) { System.out.println("Date1 is before Date2"); } else if (date1.compareTo(date2) == 0) { System.out.println("Date1 is equal to Date2"); } else { System.out.println("咋到这的?"); } } }
输出结果
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
Date.before() Date.after() Date.equals()
可以用 equals、after 和 before 方法比较日期。
- 如果两个日期在同一时间点,equals方法将返回true。
- 如果 date1 在 date2 之前,before 返回 true,否则返回 false。
- 如果 date2 在 date1 之后,after 返回 true,否则返回 false。
package com.wupx.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo2 { public static void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2019-10-01"); Date date2 = sdf.parse("2019-10-17"); System.out.println("date1 : " + sdf.format(date1)); System.out.println("date2 : " + sdf.format(date2)); if (date1.after(date2)) { System.out.println("Date1 is after Date2"); } if (date1.before(date2)) { System.out.println("Date1 is before Date2"); } if (date1.equals(date2)) { System.out.println("Date1 is equal Date2"); } } }
输出结果
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
Calender.before() Calender.after() Calender.equals()
Calendar 类也有 compareTo、equals、after 和 before 方法,工作方式与上面描述的 Date 类的方法相同。因此,如果日期信息保存在 Calendar 类中,则不需要提取日期来执行比较。
package com.wupx.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; public class DateDemo3 { public static