zoukankan      html  css  js  c++  java
  • 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 中比较日期的几种常用方法,以提高自己实际操作的能力。

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

     

  • 相关阅读:
    UVA 10617 Again Palindrome
    UVA 10154 Weights and Measures
    UVA 10201 Adventures in Moving Part IV
    UVA 10313 Pay the Price
    UVA 10271 Chopsticks
    Restore DB後設置指引 for maximo
    每行SQL語句加go換行
    种服务器角色所拥有的权限
    Framework X support IPV6?
    模擬DeadLock
  • 原文地址:https://www.cnblogs.com/east7/p/13893703.html
Copyright © 2011-2022 走看看