How to Compare Dates in Java17 Mar 2025 | 6 分钟阅读 在 Java 中,当我们处理日期和时间时,有时需要比较日期。Java 中日期的比较不像数字的比较那么直接。因此,在 Java 中比较两个日期是一项有点棘手的任务。我们不需要自己实现任何逻辑来比较日期。为了使这项任务更轻松,Java 提供了 compareTo()、before()、after() 和 equals() 方法。在本节中,我们将学习如何在 Java 中比较两个日期。 Java 中有四个类提供了比较两个日期的方法。
使用 Date.compareTo() 方法Java Date 类 提供了与时间和日期相关的各种方法。它是 java.util 包中的一个类。该类实现了 Serializable、Cloneable 和 Comparable<Date> 接口。 对于两个日期的比较,该类提供了 compareTo() 方法。它按顺序比较日期。它将(要比较的)日期解析为一个参数。如果参数日期为 null,则抛出 NullPointerException。 语法 它返回整数值
请记住: 如果你在 Java 中处理日期,请不要忘记导入 java.text.SimpleDateFormat、java.text.ParseException、java.util.Date。 让我们来实现 compareTo() 方法并比较两个日期。 在以下示例中,我们创建了一个 SimpleDateFormat 类的实例,它允许我们处理不同的日期格式。之后,我们创建了两个 Date 类型的变量 date1 和 date2。通过使用 SimpleDateFormat 类的 parse() 方法,我们解析了要比较的日期。该方法返回从字符串解析的 date。我们将 Date 类型的 date1 和 date2 变量传递给 format() 方法。该方法给出格式化的日期/时间字符串。 为了比较两个日期,我们使用了 compareTo() 方法。如果两个日期相等,它将打印 两个日期相等。 如果 date1 大于 date2,它将打印 日期 1 在日期 2 之后。如果 date1 小于 date2,它将打印 日期 1 在日期 2 之后。 CompareDatesExample1.java 输出 Date 1: 2020-07-20 Date 2: 2020-06-18 Date 1 comes after Date 2 使用 Date 类Java 的 date 类提供了 before()、after() 和 equals() 方法 来比较两个日期。 before(): 该方法检查日期是否在指定日期之前。它解析 Date 类型的参数。当表示的时间瞬间严格早于此 Date 对象表示的时间瞬间时,它返回 true,否则返回 false。 语法 如果 when 为 null,则抛出 NullPointerException。 after(): 该方法检查日期是否在指定日期之后。它解析 Date 类型的参数。当表示的时间瞬间严格晚于此 Date 对象表示的时间瞬间时,它返回 true,否则返回 false。 语法 如果 when 为 null,则抛出 NullPointerException。 equals(): 该方法检查(比较)两个日期的相等性。它重写了 Object 类的 equals() 方法。如果对象相同,则返回 true,否则返回 false。因此,当且仅当 getTime() 方法为两个日期返回相同的 long 值时,Date 对象才相等。 语法 让我们在示例中使用上述解释的方法,并通过这些方法来比较两个日期。 CompareDatesExample2.java 输出 Date1: 2019-01-01 Date2: 2020-01-01 Date1 comes before Date2 使用 Calendar 类与 Java Date 类一样,Calendar 类 也提供了 before()、after() 和 equals() 方法。这三个方法的签名与我们上面解释的相同。 让我们使用 Calendar 类,并通过 after()、before() 和 equals() 方法来比较两个日期。 在下面的示例中,我们使用了与上一个示例相同的方法,除了 getInstance() 和 setTime() 方法。 getInstance(): 它是 Calendar 的一个静态方法。它返回一个使用默认时区和区域设置的 Calendar。 语法 setTime(): 该方法根据指定的日期设置日历时间。它解析 Date 类型的参数。 语法 CompareDatesExample3.java 输出 Date1: 2020-12-01 Date2: 2020-12-01 Both dates are equal 使用 LocalDate 类Java 提供了另一个 LocalDate 类来比较两个 LocalDate、LocalTime 和 LocalDateTime。它是 java.time 包的成员。该类提供 isBefore()、isAfter()、isEquals() 和 compareTo() 方法来比较日期。这些方法与 Date 和 Calendar 类的 before()、after() 和 equals() 方法的工作方式相同。 让我们在示例中使用 LocalDate 类来比较两个日期。 在下面的示例中,我们使用了以下方法来比较两个日期。所有方法都根据本地时间线来检查日期。 of(): 它是 LocalDate 类的静态方法。它从年、月和日获取 LocalDate 的实例。它接受三个 int 类型的参数 year、month 和 date。它返回具有指定日期的 LocalDate。 语法 其中 year: 必须在 MIN_YEAR 到 MAX_YEAR 之间。 month: 必须在 1(一月)到 12(十二月)之间。 dayOfMonth: 必须在 1 到 31 之间。 如果任何参数的值超出范围,则抛出 DateTimeException。 isBefore(): 该方法检查日期是否在指定日期之前。它将(要比较的)日期解析为一个参数。仅当日期在指定日期之前时,它才返回 true。其比较方法与 compareTo(ChronoLocalDate) 不同。 语法 isAfter(): 该方法检查日期是否在指定日期之前。它将(要比较的)日期解析为一个参数。仅当日期在指定日期之前时,它才返回 true。其比较方法与 compareTo(ChronoLocalDate) 不同。 语法 isEqual(): 该方法比较日期是否相等。如果两个日期相等,则返回 true,否则返回 false。它将(要比较的)日期解析为一个参数。 仅当日期在指定日期之前时,它才返回 true。其比较方法与 compareTo(ChronoLocalDate) 不同。 语法 CompareDatesExample4.java 输出 Date1: 2020-09-29 Date2: 2020-12-07 Date1 comes before Date2 |
Java 中的异常处理是处理运行时错误的一种有效方法,以确保应用程序的正常流程得以保留。Java 异常处理是一种处理运行时错误(如 ClassNotFoundException、IOException、SQLException、RemoteException 等)的机制。在 Java 中,异常是一种……
5 分钟阅读
A 是声明新 Java 类的最常用关键字。类是包含代码块的容器,代码块包括字段、方法、构造函数等。类是创建对象的模板或蓝图。它...
阅读 2 分钟
Java 8 为编程语言带来了一些新功能,其中最重要的一项是 lambda 表达式。Lambda 表达式提供了一种简洁的方式来表达可以作为参数传递给另一个方法的函数,从而实现了函数式编程范式...
阅读 4 分钟
类和对象是Java编程语言的基础,因为它是一种面向对象的语言。当我们只需要在一个程序中存储一个对象时,我们使用了Object类型的变量。然而,使用项目数组更好……
阅读 3 分钟
每个国家都有自己的手机号码格式。要验证每个国家的手机号码非常困难。因此,在本节中,我们将学习如何使用正则表达式和 Google 的 libphonenumber API 在 Java 中验证手机号码。在本节中,我们将创建一个 Java...
阅读 4 分钟
Java 中的递归是指一个方法反复调用自身的过程。在编程语言中,如果一个程序允许我们在同一函数名内调用函数,则称为递归调用。它使代码更简洁...
阅读 3 分钟
最近最少使用(LRU)是一种缓存淘汰技术,当缓存大小增长到其最大分配容量时,它将从缓存中删除最近最少访问的项目。此外,缓存必须具有强大的同步机制,因为多个线程可能会访问...
阅读 13 分钟
向量是既有大小又有方向的数学实体。在计算机编程中,向量通常用于表示同时具有大小和方向的量,例如速度、力、位移。Java 作为一种流行的面向对象编程语言,通过……为向量运算提供了内置支持。
阅读 8 分钟
Java 中的 OffsetDateTime 类使用 format() 方法提供的格式化器来格式化此日期和时间。Java 中的 OffsetDateTime 类使用 format() 方法提供的格式化器来格式化此日期和时间。语法:public...
阅读 2 分钟
在当今世界,尤其是在银行业,同时处理多笔交易是不可避免的。此类操作可能包括从简单的存款和取款功能到账户之间的转账。这不仅需要交易的准确性和效率,还需要一个...
阅读 13 分钟
我们请求您订阅我们的新闻通讯以获取最新更新。
我们提供所有技术(如 Java 教程、Android、Java 框架)的教程和面试问题
G-13, 2nd Floor, Sec-3, Noida, UP, 201301, India