• Java日期大小比较


    前言

      在 Java 语言中,日期在计算机内部表示为(long型)时间点——自1970年1月1日以来经过的毫秒数。在开发中经常会用到日期的比较,像给定一个日期和当前日期进行比较,或者给定两个日期进行时间先后的比较,还有取两个日期之间的记录等等。现在整理一下几种方法。  

      先定义几个日期,以便下文进行测试:

    String beginTime = new String("2020-08-09 13:32:20");
    String endTime = new String("2099-10-08 11:21:32");
    SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
    Date beginDate = df.parse(beginTime);
    Date endDate = df.parse(endTime);
    LocalDate beginDateLoc = LocalDate.of(2020, 8, 9);
    LocalDate endDateLoc = LocalDate.of(2099, 10, 8);

    LocalDate自带方法isBefore、isAfter和isEqual

      使用JDK8新增的函数 isBefore()、isAfter()和isEqual()来比较 LocalDate、LocalTime 和 LocalDateTime,本文仅以LocalDate为例。

    if (beginDateLoc.isBefore(endDateLoc)) {
        System.out.println("beginDate is before endDate");
    }
    if (beginDateLoc.isAfter(endDateLoc)) {
        System.out.println("beginDate is after endDate");
    }
    if (beginDateLoc.isEqual(endDateLoc)) {
        System.out.println("beginDate is equal to endDate");
    }

    LocalDate自带方法compareTo

    System.out.println(beginDateLoc.compareTo(endDateLoc));
    endDateLoc = LocalDate.of(2020, 6, 18);
    System.out.println(beginDateLoc.compareTo(endDateLoc));

      compareTo(ChronoLocalDate other)方法用法描述:如果此 Date等于参数 other,则返回0;如果在 other之前,则返回小于 0 的值;否则,返回大于 0 的值。

     

    Date自带方法before和after比较

    System.out.println(beginDate.before(endDate));
    System.out.println(beginDate.after(endDate));
    System.out.println(beginDate.equals(endDate));

      温馨提示:日期格式必须一致。

    把日期转化成长整型进行比较

        /**
         * 功能描述:求两个时间相减后的毫秒数。<br/>
         * 差格式化时间后,计算 endDt 减 beginDt 的秒数。<br/>
         * millDif >0 : endDt > beginDt
         *
         * @param beginDt 开始时间
         * @param endDt   结束时间
         * @return Long 时间差,单位:milliseconds
         */
        public static Long getMillSub(String beginDt, String endDt, String formatStr) {
            long millDif = 0;
            if (StringUtils.isBlank(formatStr)) {
                formatStr = "yyyy-MM-dd";
            }
            try {
                SimpleDateFormat df = new SimpleDateFormat(formatStr);
                Date beginDate = df.parse(beginDt);
                Date endDate = df.parse(endDt);
                millDif = endDate.getTime() - beginDate.getTime();
            } catch (Exception e) {
                log.error("日期转换失败,", e);
                return null;
            }
            return millDif;
        }

    Calender自带方法before()和after()

     Calendar 类也有 compareTo、equals、after 和 before 方法,工作方式与上面描述的 Date 类的方法类似。因此,如果日期信息保存在 Calendar 类中,则不需要提取日期进行比较。

            Calendar cal1 = Calendar.getInstance();
            Calendar cal2 = Calendar.getInstance();
            cal1.setTime(beginDate);
            cal2.setTime(endDate);
    
            if (cal1.after(cal2)) {
                System.out.println("beginTime is after endTime");
            }
            if (cal1.before(cal2)) {
                System.out.println("beginTime is before endTime");
            }
            if (cal1.equals(cal2)) {
                System.out.println("beginTime is equal to endTime");
            }

    小结

       本文主要总结了在 Java 中比较日期的几种常用方法,以提高自己实际操作的能力。

       文章到这里就结束了,看完之后你有什么想法想要跟大家分享呢?评论区在等着你!

     

  • 相关阅读:
    从头梳理一下经常问到的 “零拷贝” 问题!
    Redis缓存使用中的热key问题
    使用Redis,你必须知道的21个注意要点
    一文理解 Redis 的核心原理与技术!
    大厂常问的Redis面试题
    三种不同场景下的 Kubernetes 服务调试方法
    Docker 和 Kubernetes:root 与特权
    DRBD详细解说及配置过程记录
    MySQL 高可用方案-PXC环境部署记录
    MySQL高可用方案
  • 原文地址:https://www.cnblogs.com/east7/p/13893703.html
Copyright © 2020-2023  润新知