在 Java 中如何比较日期?

调度侠
• 阅读 15310

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

<center><img src="https://img2018.cnblogs.com/b...; /></center>

参考

https://blog.csdn.net/qq_2727...
在 Java 中如何比较日期?

点赞
收藏
评论区
推荐文章
Karen110 Karen110
4年前
一篇文章带你了解JavaScript日期
日期对象允许您使用日期(年、月、日、小时、分钟、秒和毫秒)。一、JavaScript的日期格式一个JavaScript日期可以写为一个字符串:ThuFeb02201909:59:51GMT0800(中国标准时间)或者是一个数字:1486000791164写数字的日期,指定的毫秒数自1970年1月1日00:00:00到现在。1\.显示日期使用
Alex799 Alex799
4年前
Vue进阶(幺柒叁):表单元素日期校验
本文主要讲解基于elementuidatetimepicker实现日期时间,在表单校验中的校验逻辑及实现方法。注:在表单检验时间组件时,应在检验中增加type:'date',否则会提示检验对象错误问题。vue部分<开始/结束日期,时间<template<elrowstyle"margintop:
Wesley13 Wesley13
3年前
java8时间工具类Localdate、LocaldateTime
优点:1.方便。Date只能是日期加时间的格式,而LocalDate、LocalTime、LocalDateTime 分别代表日期,时间,日期时间,非常灵活。再就是后者在日期计算及格式化方面非常简单易用,而Date要繁琐很多。2.线程安全。传统时间类不支持多线程安全。缺点<目前发现的坑:1.在比较日期相隔
Wesley13 Wesley13
3年前
java日期大小比较
之前有面试到两个日期的大小比较方式,现在整理一下几种方法。 例子: StringbeginTimenewString("2017060910:22:22");   StringendTimenewString("2017050811:22:22"); 1 直接用Date自带方法before()和after()
Wesley13 Wesley13
3年前
java8 时间类与Date类的相互转化
java8时间类与Date类的相互转化在转换中,我们需要注意,因为java8之前Date是包含日期和时间的,而LocalDate只包含日期,LocalTime只包含时间,所以与Date在互转中,势必会丢失日期或者时间,或者会使用起始时间。如果转LocalDateTime,那么就不存在信息误差。//Date与Instant的相互转化
Wesley13 Wesley13
3年前
java8 日期类库基本使用
java8日期类库基本使用publicstaticvoidmain(Stringargs){/java比较两个日期的差年月日等/DateTimeFormatterdateTimeFormatter
Wesley13 Wesley13
3年前
java.util.Date和java.sql.Date的区别和相互转化
java.util.Date是在除了SQL语句的情况下面使用的。java.sql.Date是针对SQL语句使用的,它只包含日期而没有时间部分它们都有getTime方法返回毫秒数,自然就可以直接构建。java.util.Date是java.sql.Date的父类,前者是常用的表示时间的类,我们通常格式化或者得到当前时间都是用
Wesley13 Wesley13
3年前
Java 日期时间
java.util包提供了Date类来封装当前的日期和时间。Date类提供两个构造函数来实例化Date对象。Date() 使用当前日期创建对象Date(longmillisec) 使用时间戳 即 从1970年1月1日开始的毫秒数。Date对象创建以后,可以调用下面的方法。1.booleanafter(Datedate)
Wesley13 Wesley13
3年前
Java 8中处理日期和时间示例
在Java8以前,日期和时间处理一直被广大java程序员抱怨太难用,首先是java.util和java.sql中,都包含Date类,如果要处理java.text.DateFormat类处理。同时java.util.Date中既包含了日期,又包含了时间,所以java8新的日期和时间库,很好的解决了以前日期和时间类的很多弊端。并且也借鉴了第
Wesley13 Wesley13
3年前
JS 日期比较方法
1、日期参数格式:yyyymmdd//a:日期a,b:日期b,flag:返回的结果  functionduibi(a,b,flag){vararra.split("");varstarttimenewDate(arr0,arr1,arr2)
Wesley13 Wesley13
3年前
Java技巧——比较两个日期相差的天数
Java技巧——比较两个日期相差的天数摘要:本文主要记录了在Java里面如何判断两个日期相差的天数。判断两个Date类型的日期之间的天数通过计算毫秒数判断:1publicstaticvoidmain(Stringargs)throwsExc