在 Java 中如何比较日期?
2024-10-21 17:37:45
在 Java 中有多种方法可以比较日期,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在Java中,Date是一个对象,包含多个用于比较的方法,任何比较两个日期的方法本质上都会比较日期的时间。
本文主要介绍以下五种方式:
- 使用 Date.compareTo()
- 使用 Date.before()、Date.after() 和 Date.equals()
- 使用 Calender.before()、Calender.after() 和 Calender.equals()
- 使用 getTime()
- 使用 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 中比较日期的几种常用方法,可以自己实际操作一下。
参考
最新文章
- 【资源】NOIP2013测试数据senior/junior 普及/提高 数据
- 7-RandomAccessFile 随机流
- Android:学习AIDL,这一篇文章就够了(上)
- Win7在CMD命令行中使用管理员权限运行命令
- ANDROID 开机启动VNC SERVER
- 36.中国特色社会主义的体制中有这样的现象:地方省政府要坚持党的领导和按 照国务院的指示进行安全生产。请编写一个java应用程序描述上述的体制现象。 要求如下: (1)该应用程序中有一个“党中央”接口:CentralPartyCommittee,该接口中 有个“坚持党的领导”方法:void partyLeader() (2)该应用程序中有一个“国务院”抽象类:StateCouncil,该抽象类中有
- java testng框架的windows自动化-自动运行testng程序上篇
- 关于 chrome canary X64 在 win7 64bit 下面缺少openvr_api.dll的解决方法
- jmeter(四)参数化之CSV Data Set Config 和 CSVRead函数的区别
- jdk与eclipse位数不一致出现的问题
- 2. GitHub远程仓库
- 11.20 HTML及CSS
- Hibernate优化策略
- Ubuntu系统安装VMware Tools的简单方法
- 移植SDL最新版本(转)
- iOS文件和文件夹的创建,删除,移动, 拷贝,是否存在及简单数据类型的读写
- 详细解析Spring事务的配置和OpenSessionInview的作用
- [ZPG TEST 115] 字符串【归类思想】
- javascript ---(常用工具类的封装)
- 深入理解JVM-java字节码文件结构剖析(练习解读字节码)
热门文章
- Glibc编译报错:*** These critical programs are missing or too old: as ld gcc
- android clipChildren 的使用与遇到的困难
- 【Android - 控件】之V - Toolbar的使用
- C语言I作业003
- IDEA启动tomcat报java.net.SocketExceptionsocket closed
- 优雅解决 SpringBoot 工程中多环境下 application.properties 的维护问题
- sync.Map(在并发环境中使用的map)
- Python之HTTP静态服务器-面向对象版开发
- Eclipse for Tricore 的安装方法
- cenos基本信息和ssh