【问题标题】:Finding Date Difference查找日期差异
【发布时间】:2009-12-07 18:03:17
【问题描述】:

如果某个日期比另一天早 5 天,那么有效的方法是什么?在比较之前,我是否需要先使用特定的 SimpleDateFormat 解析这两天?

【问题讨论】:

  • 5 个日历日? 5 个工作日?

标签: java date


【解决方案1】:

最好的 Java 日期时间 API 是 Joda Time。它使这些任务和其他任务比使用标准 API 容易得多。

【讨论】:

    【解决方案2】:

    最快但最不准确的方法是,您可能只需将两者都放入 java.util.Date 和 getTime() 中,然后将差值除以一天中的毫秒数。

    您可以通过创建两个 Calendar 对象并使用它们来使其更准确。

    如果您真的想很好地解决这个问题,并且手头有很多时间,请查看 Joda Time。

    【讨论】:

      【解决方案3】:

      Calendar 接口有一些不错的方法,包括beforeafterequals

      【讨论】:

      【解决方案4】:
      【解决方案5】:

      你可以的

      Long DAY_IN_MILLIS = 86400000;
      
      if((dateA - dateB) > DAY_IN_MILLIS * 5) {
          // dateA is more than 5 days older than dateB
      }
      

      【讨论】:

        【解决方案6】:
        Date date1 = // whatever
        Date date2 = // whatever
        
        Long fiveDaysInMilliseconds = 1000 * 60 * 60 * 24 * 5    
        boolean moreThan5Days = Math.abs(date1.getTime() - date2.getTime()) > fiveDaysInMilliseconds 
        

        【讨论】:

        • 你不能只说date1 - date2
        • 谢谢,我忘了调用 'getTime()' - 我最近一直在使用 Groovy,它重载了 '-' 运算符,所以你可以说 date1 - date2
        【解决方案7】:

        如果您需要忽略日期的时间,您可以执行类似

        的操作
            public static boolean compare5days(Date date, Date another) {
                Calendar cal = Calendar.getInstance();
                cal.setTime(another);
                cal.add(Calendar.DATE, -5);
        
                // clear time 
                cal.set(Calendar.HOUR_OF_DAY, 0);
                cal.set(Calendar.MINUTE, 0);
                cal.set(Calendar.SECOND, 0);
                cal.set(Calendar.MILLISECOND, 0);
        
                return date.before(cal.getTime());
            }
        

        【讨论】:

          【解决方案8】:
          days = (date2.getTime() - date1.getTime())/86400000L
          

          【讨论】:

          • 这可能是最有效的,但这并没有考虑夏令时。
          • -1 这是错误的,除非 Date 实例是从 UTC 时间派生的。
          【解决方案9】:

          天 = (date2.getTime() - date1.getTime())

          【讨论】:

          • 这是不正确的,因为 java.util.Date.getTime() 返回毫秒数。所以这个差异给出了 date1 和 date2 之间的毫秒数。
          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2019-11-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多