当前位置: 移动技术网 > IT编程>软件设计>架构 > 在 Java 中如何比较日期?

在 Java 中如何比较日期?

2019年10月18日  | 移动技术网IT编程  | 我要评论

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

参考

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网