行业资讯 2025年08月6日
0 收藏 0 点赞 878 浏览 4080 个字
摘要 :

文章目录 1.Java 8及以后的日期比较 1.1 核心类 1.2 如何比较日期大小 1.3 示例 2.Java 7及之前的日期比较 2.1 核心类 2.2 比较方法 2.3 比较日期实例 学习在Java中……




  • 1.Java 8及以后的日期比较
    • 1.1 核心类
    • 1.2 如何比较日期大小
    • 1.3 示例
  • 2.Java 7及之前的日期比较
    • 2.1 核心类
    • 2.2 比较方法
    • 2.3 比较日期实例

    学习在Java中比较两个给定的日期,以确定哪个日期在时间线上更早,哪个更晚。我们将通过以下类来看日期比较的例子:

    • Java 8中的LocalDate、LocalDateTime和ZonedDateTime类
    • Java 7及之前的Date和Calendar类

    1.Java 8及以后的日期比较

    1.1 核心类

    Java 8中最常用的日期类是:

    • java.time.LocalDate – 只有日期,没有时间和时区。
    • java.time.LocalDateTime – 只有日期和时间,没有时区。
    • java.time.ZonedDateTime – 日期和时间,有时区。
    • java.time.Instant – 自纪元(1970年1月1日UTC午夜)以来经过的秒数。

    1.2 如何比较日期大小

    以上所有类都有比较两个实例自己的方法,即isAfter()、isBefore()、isEqual()和compareTo()。

    • date1.isAfter(date2) – 如果date1在date2之后返回true;否则返回false。
    • date1.isBefore(date2) – 如果date1在date2之前返回true;否则返回false。
    • date1.isEqual(date2) – 如果date1等于date2返回true;否则返回false。
    • date1.compareTo(date2) – 如果date1在date2之后返回“正数”;否则返回“负数”。值为“0”表示两个日期都相等。

    需要注意的是:

    • 如果我们只想比较日期部分,而不关心时间部分,则使用LocalDate实例。
    • LocalDateTime和ZonedDateTime也会比较时间部分,所以即使它们代表的日期是相同的日历日,如果时间不同,它们也不相等。
    • 使用toLocalDate()从LocalDateTime和ZonedDateTime实例中获取日期部分。

    1.3 示例

    Java程序用于比较两个LocalDate类的实例。

    LocalDate today = LocalDate.now();
    LocalDate anotherDay = LocalDate.of(2018, 01, 10);
    System.out.println(today.isEqual(anotherDay));        //false
    System.out.println(today.isAfter(anotherDay));        //true
    System.out.println(today.isBefore(anotherDay));        //false
    int diff = today.compareTo(anotherDay);
    if(diff > 0) {
        System.out.println(today + \" is greater than \" + anotherDay);
    } else if (diff < 0) {
        System.out.println(today + \" is less than \" + anotherDay);
    } else {
        System.out.println(today + \" is equal to \" + anotherDay);
    }
    

    Java程序用于比较两个LocalDateTime实例。

    LocalDateTime instance = LocalDateTime.now();
    // 在两个实例中都有不同的时间部分
    Thread.currentThread().sleep(100);
    LocalDateTime anotherInstance = LocalDateTime.now();
    // 仅比较日期部分
    boolean isEqual = instance.toLocalDate()
      .isEqual(anotherInstance.toLocalDate());
    System.out.println(isEqual);    //true
    // 比较日期和时间
    System.out.println(instance.isEqual(anotherInstance)); // false
    System.out.println(instance.isAfter(anotherInstance)); // false
    System.out.println(instance.isBefore(anotherInstance)); // true
    

    Java程序比较两个ZonedDateTime实例。请注意,使用compareTo()进行的比较首先基于瞬时值,然后基于本地日期时间,再基于时区ID,最后基于年代。换句话说,它会比较两个实例的所有日期和时间字段。因此,如果两个实例在宇宙时间线上完全相同的时间,但它们在不同的时区,则compareTo()方法不会返回零。
    为了正确比较两个ZonedDateTime相对于纪元时间,请比较zdt.toInstant()字段。或者我们可以使用isBefore(),isEqual()或isAfter()方法来比较纪元秒。

    ZonedDateTime now = ZonedDateTime.now();
    //如果我们想在不同的时区中转换为同一时刻
    ZonedDateTime nowInUTC = now.withZoneSameInstant(ZoneId.of(\"UTC\"));
    ZonedDateTime zdtInUTC = ZonedDateTime
      .parse(\"2022-02-15T11:21:12.123+05:30[UTC]\");
    long difference = nowInUTC.toInstant()
            .compareTo(zdtInUTC.toInstant());
    if (difference > 0) {
      System.out.println(\"zoneddatetime1 > zoneddatetime2\");
    } else if (difference < 0) {
      System.out.println(\"zoneddatetime1 < zoneddatetime2\");
    } else {
      System.out.println(\"\\\"zoneddatetime1 = zoneddatetime2\");
    }
    

    2.Java 7及之前的日期比较

    2.1 核心类

    Java 7之前最常用的日期类是:

    • java.util.Date
    • java.util.Calendar

    2.2 比较方法

    Date和Calendar类都有before()、after()、equals()和compareTo()等方法用于日期比较。

    • date1.after(date2) – 如果date1在date2之后返回true;否则返回false。
    • date1.before(date2) – 如果date1在date2之前返回true;否则返回false。
    • date1.equals(date2) – 如果date1和date2相等返回true;否则返回false。
    • date1.compareTo(date2) – 如果date1在date2之后返回“正数”;否则返回“负数”。值为“0”表示两个日期都相等。

    注意:Date和Calendar类都有时间部分,上述方法都会使用时间部分进行比较。因此,如果您只想比较日期部分而不关心时间部分,则需要从其他实例中提取day / month / year信息并将其逐一进行比较。

    2.3 比较日期实例

    在给定的代码中,我们首先比较了两个日期实例,包括它们的时间部分。

    Date date1 = new Date();
    // 两个实例的时间部分不同
    Thread.currentThread().sleep(100);
    Date date2 = new Date();
    System.out.println(date1.equals(date2)); // false
    System.out.println(date1.after(date2)); // false
    System.out.println(date1.before(date2)); // true
    

    现在我们将仅比较这两个日期的日期部分,不包括与实例相关联的任何时间部分。我们使用Calendar类从Date实例中提取天、月和年的信息。

    Date date1 = new Date();
    Thread.currentThread().sleep(100);
    Date date2 = new Date();
    int diff = compareDatePartOnly(date1, date2);
    if (diff > 0) {
      System.out.println(date1 + \" is greater than \" + date2);
    } else if (diff < 0) {
      System.out.println(date1 + \" is less than \" + date2);
    } else {
      System.out.println(date1 + \" is equal to \" + date2);
    }
    private static int compareDatePartOnly(final Date date1, final Date date2) {
        Calendar cal1 = Calendar.getInstance();
        Calendar cal2 = Calendar.getInstance();
        cal1.setTime(date1);
        cal2.setTime(date2);
        int result = cal1.get(Calendar.YEAR) - cal2.get(Calendar.YEAR);
        if (result == 0) {
          result = cal1.get(Calendar.DAY_OF_YEAR) - cal2.get(Calendar.DAY_OF_YEAR);
        }
        return result;
    }
    

    以上就是Java中比较两个日期的大小的全部方法,包括java8及以后的版本如何比较日期时间大小,以及java7及以前的版本如何比较日期时间大小,希望对你有帮助。

微信扫一扫

支付宝扫一扫

版权: 转载请注明出处:https://www.zuozi.net/9628.html

管理员

相关推荐
2025-08-06

文章目录 一、Reader 接口概述 1.1 什么是 Reader 接口? 1.2 Reader 与 InputStream 的区别 1.3 …

988
2025-08-06

文章目录 一、事件溯源 (一)核心概念 (二)Kafka与Golang的优势 (三)完整代码实现 二、命令…

465
2025-08-06

文章目录 一、证明GC期间执行native函数的线程仍在运行 二、native线程操作Java对象的影响及处理方…

348
2025-08-06

文章目录 一、事务基础概念 二、MyBatis事务管理机制 (一)JDBC原生事务管理(JdbcTransaction)…

456
2025-08-06

文章目录 一、SnowFlake算法核心原理 二、SnowFlake算法工作流程详解 三、SnowFlake算法的Java代码…

517
2025-08-06

文章目录 一、本地Jar包的加载操作 二、本地Class的加载方法 三、远程Jar包的加载方式 你知道Groo…

832
发表评论
暂无评论

还没有评论呢,快来抢沙发~

助力内容变现

将您的收入提升到一个新的水平

点击联系客服

在线时间:08:00-23:00

客服QQ

122325244

客服电话

400-888-8888

客服邮箱

122325244@qq.com

扫描二维码

关注微信客服号