在 Java 中如何比較日期?

在 Java 中有多種方法能夠比較日期,日期在計算機內部表示爲(long型)時間點——自1970年1月1日以來通過的毫秒數。在Java中,Date是一個對象,包含多個用於比較的方法,任何比較兩個日期的方法本質上都會比較日期的時間。java

本文主要介紹如下五種方式:.net

  1. 使用 Date.compareTo()
  2. 使用 Date.before()、Date.after() 和 Date.equals()
  3. 使用 Calender.before()、Calender.after() 和 Calender.equals()
  4. 使用 getTime()
  5. 使用 Java 8 的 isBefore()、isAfter()、isEqual() 和 compareTo()

Date.compareTo()

Date 實現了 Comparable<Date>,所以兩個日期能夠直接用 compareTo 方法進行比較。code

  • 若是兩個日期相等,則返回值爲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("咋到這的?");
        }

    }

}

輸出結果orm

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");
        }
    }
}

輸出結果blog

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 類中,則不須要提取日期來執行比較。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

getTime()

能夠直接比較兩個日期的時間點。這是對兩種原始數據類型的比較,所以能夠使用 < 、 > 和 == 來比較。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()

在 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>

參考

http://www.javashuo.com/article/p-rkwaleui-ng.html

相關文章
相關標籤/搜索