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

参考

https://blog.csdn.net/qq_27276045/article/details/100792621

在 Java 中如何比较日期?的更多相关文章

  1. Java中的时间日期处理

    程序就是输入——>处理——>输出.对数据的处理是程序员需要着重注意的地方,快速.高效的对数据进行处理时我们的追求.其中,时间日期的处理又尤为重要和平凡,此次,我将把Java中的时间日期处理 ...

  2. Java中Date()类 日期转字符串、字符串转日期的问题(已解决)

    Java中Date()类 日期转字符串.字符串转日期的问题 今天在写东西的时候突然发现一个问题,就是先new 一个Date()然后将生成的值转为字符串, 然后再将转换后的字符串再次用new Date( ...

  3. Java 中的时间日期 API

    自从 14 年发布 Java 8 以后,我们古老 java.util.Date 终于不再是我们 Java 里操作日期时间的唯一的选择. 其实 Java 里的日期时间的相关 API 一直为世猿诟病,不仅 ...

  4. Java中关于时间日期格式保存到mysql的问题

    首先在设置数据库的时间日期字段的时候要先确定好采用何种类型,DATETIME. TIMESTAMP.DATE.TIME.YEAR. 其中datetime.time用的比较多,对应java中生成的poj ...

  5. Java中的有关日期的对象

    目录 Date SimpleDateFormat Calendar 常用方法 Java8中用于计算时差的类 1. Period(以年月日来表示日期差) 2. Duration(以秒与毫秒来表示时间差) ...

  6. 【问题记录】MySQL中时间戳转日期格式和Java中时间戳转日期格式偶尔不一致

    背景: MySQL的某个字段存放着一些时间戳格式的时间. 问题描述: Java程序将MySQL中的时间戳字段取出来,在Java程序中转成yyyy-MM-dd HH:mm:ss格式的时候,偶尔会出现转化 ...

  7. Java中的操作日期的工具类

    import java.text.DateFormat; import java.text.ParseException; import java.text.SimpleDateFormat; imp ...

  8. JAVA中的六种日期类型使用

    基本的6种日期类 /** * 六种时间类型的类 * 数据库格式的时间三种格式 */ java.util.Date date = new java.util.Date();//年与日时分秒 //数据库的 ...

  9. Java中常用的日期操作方法

    日常项目当中经常会用到操作日期,抽出时间总结了一下,欢迎和大家多多沟通学习,如有任何改进意见和建议,我的QQ是1243672,欢迎联系哦. /** * 日期操作类 * 开发公司:北京东达悦科技有限公司 ...

随机推荐

  1. mysqldump工具实现mysql数据库的备份还原

    简介 冷.温.热备份 冷备:读写操作均不可进行 温备:读操作可执行:但写操作不可执行 热备:读写操作均可执行 MyISAM:温备,不支持热备 InnoDB:都支持 不管是热备还原还是冷备还原,还原时都 ...

  2. “狗屁不通文章生成器”登顶GitHub热榜,分分钟写出万字形式主义大作

    一.垃圾文字生成器介绍 最近在浏览GitHub的时候,发现了这样一个骨骼清奇的雷人项目,而且热度还特别高. 项目中文名:狗屁不通文章生成器 项目英文名:BullshitGenerator 根据作者的介 ...

  3. 细说JVM内存模型

    细说JVM内存模型 前言 在正式学习 JVM 内存模型之前,先注意以下几个是问题: JVM 内存模型与 JAVA 内存模型不是同一个概念.JVM 内存模型是从运行时数据区的结构的角度描述的概念:而 J ...

  4. c 语言I博客作业02

    这个作业属于哪个课程 C语言程序设计1 这个作业要求在哪里 https://edu.cnblogs.com/campus/zswxy/SE2019-2/homework/8687 我在这个课程的目标是 ...

  5. linux中安装tensorflow

    liunxsudo apt-get install python-pip python-dev python2.X -> pippython3.X -> pip3 pip --versio ...

  6. 2019-2020-11 20199317 《Linux内核原理与分析》 第十一周作业

    ShellShock 攻击实验 1  ShellShock 简介      Shellshock,又称Bashdoor,是在Unix中广泛使用的Bash shell中的一个安全漏洞,首次于2014年9 ...

  7. IDEA的控制台拖拽出来之后,如何恢复?

    大家搜到这个的时候,肯定遇到了如下图展示的尴尬情况,我们的控制台在不小心之间被拖拽出来,然后不知如何再拖回去?放心,我来告诉你怎么办. 点击左下角的  恢复按钮 就可以了.

  8. 【Python3网络爬虫开发实战】6.4-分析Ajax爬取今日头条街拍美图【华为云技术分享】

    [摘要] 本节中,我们以今日头条为例来尝试通过分析Ajax请求来抓取网页数据的方法.这次要抓取的目标是今日头条的街拍美图,抓取完成之后,将每组图片分文件夹下载到本地并保存下来. 1. 准备工作 在本节 ...

  9. 【云速建站】微信公众平台中维护IP白名单

    [摘要] 介绍获取接入IP白名单的操作步骤 网站后台对接微信公众号.支付等都依赖于白名单,接下来就介绍一下白名单的配置. 1.1      为什么要设置白名单 为了提高公众平台开发者接口调用的安全性, ...

  10. 【跟唐老师学习云网络】-第8篇 iptables - filter过滤功能

    [摘要] 前面的各种协议已经可以把基本可用的物理网络世界给形成了,在正常情况下,它可以玩的很溜.比如组个局域网办公,或者打个联机魔兽争霸,都没有什么问题. 一.背景介绍 前面的各种协议已经可以把基本可 ...