在 Java 中有多种方法能够比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来通过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。java
本文主要介绍如下五种方式:.net
Date 实现了 Comparable<Date>,所以两个日期能够直接用 compareTo 方法进行比较。code
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("咋到这的?"); } } }
输出结果orm
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
能够用 equals、after 和 before 方法比较日期。对象
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"); } } }
输出结果blog
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
Calendar 类也有 compareTo、equals、after 和 before 方法,工做方式与上面描述的 Date 类的方法相同。所以,若是日期信息保存在 Calendar 类中,则不须要提取日期来执行比较。get
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 void main(String[] args) throws ParseException { SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd"); Date date1 = sdf.parse("2009-12-31"); Date date2 = sdf.parse("2010-01-31"); System.out.println("date1 : " + sdf.format(date1)); System.out.println("date2 : " + sdf.format(date2)); Calendar cal1 = Calendar.getInstance(); Calendar cal2 = Calendar.getInstance(); cal1.setTime(date1); cal2.setTime(date2); if (cal1.after(cal2)) { System.out.println("Date1 is after Date2"); } if (cal1.before(cal2)) { System.out.println("Date1 is before Date2"); } if (cal1.equals(cal2)) { System.out.println("Date1 is equal Date2"); } } }
输出结果io
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
能够直接比较两个日期的时间点。这是对两种原始数据类型的比较,所以能够使用 < 、 > 和 == 来比较。form
在比较日期以前,必须使用前面建立的 Date 对象中的数据来建立长整型。class
package com.wupx.date; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; public class DateDemo4 { 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)); long time1 = date1.getTime(); long time2 = date2.getTime(); if (time1 > time2) { System.out.println("Date1 is after Date2"); } else if (time1 < time2) { System.out.println("Date1 is before Date2"); } else if (time1 == time2) { System.out.println("Date1 is equal to Date2"); } else { System.out.println("咋到这的?"); } } }
输出结果
date1 : 2019-10-01 date2 : 2019-10-17 Date1 is before Date2
在 Java 8 中,能够使用新的 isBefore()、isAfter()、isEqual() 以及 compareTo() 来比较 LocalDate、LocalTime 和 LocalDateTime。
package com.wupx.date; import java.time.LocalDate; import java.time.format.DateTimeFormatter; public class DateDemo5 { public static void main(String[] args) { DateTimeFormatter sdf = DateTimeFormatter.ofPattern("yyyy-MM-dd"); LocalDate date1 = LocalDate.of(2019, 10, 01); LocalDate date2 = LocalDate.of(2019, 10, 17); System.out.println("date1 : " + sdf.format(date1)); System.out.println("date2 : " + sdf.format(date2)); System.out.println("Is..."); if (date1.isAfter(date2)) { System.out.println("Date1 is after Date2"); } if (date1.isBefore(date2)) { System.out.println("Date1 is before Date2"); } if (date1.isEqual(date2)) { System.out.println("Date1 is equal Date2"); } System.out.println("CompareTo..."); 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 Is... Date1 is before Date2 CompareTo... Date1 is before Date2
本文主要讲解了在 Java 中比较日期的几种经常使用方法,能够本身实际操做一下。
<center><img src="https://img2018.cnblogs.com/blog/1356806/201910/1356806-20191009000648748-355850292.png" /></center>
参考