欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

在 Java 中如何比较日期?

程序员文章站 2022-05-18 19:28:47
在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。 本文主要介绍以下五种方式: 1. 使用 Date.compareTo ......

在 java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在java中,date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。

本文主要介绍以下五种方式:

  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,因此两个日期可以直接用 compareto 方法进行比较。

  • 如果两个日期相等,则返回值为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 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");
        }
    }
}

输出结果

date1 : 2019-10-01
date2 : 2019-10-17
date1 is before date2

gettime()

可以直接比较两个日期的时间点。这是对两种原始数据类型的比较,因此可以使用 < 、 > 和 == 来比较。

在比较日期之前,必须使用前面创建的 date 对象中的数据来创建长整型。

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 中比较日期的几种常用方法,可以自己实际操作一下。

在 Java 中如何比较日期?

参考