0

计算两个日期之间的差异 ( java.util.Date) 以没有。of days 看起来很简单,我们可以找到不同的方法来做到这一点。我使用以下代码来计算日期差异:

  public static long daysBetween(Calendar startDate, Calendar endDate) {
        Calendar date = (Calendar) startDate.clone();
        long daysBetween = 0;
        while (date.before(endDate)) {
            date.add(Calendar.DAY_OF_MONTH, 1);
            daysBetween++;
        }
        return daysBetween;
    }

main()中,我使用了以下两个日期:

    Calendar c1 = Calendar.getInstance();
    c1.set(2011, 1, 1);
    Calendar c2 = Calendar.getInstance();
    c2.set(2011, 1, 31);

    long difference = daysBetween(c1, c2); // 

但是变量的值difference并不一致。有时是 30,有时是 31。那么,为什么会发生这种情况。

是否有任何解决方案可以使用该方法产生一致的输出?

4

2 回答 2

3

您正在设置日历的日期部分,而不是时间部分。

有时时钟会在调用之间滴答作响getInstance(),有时不会,因此不一致。

选项:

  • 设置时间和日期,例如午夜
  • 使用更好的日期/时间库 - Joda Time - 它具有更合适的表示 ( LocalDate)。这里的一个重要寓意是,如果你能找到一个代表你所拥有的确切信息的类型,而不是别的,那么这可能是一个很好的选择,并且导致的并发症更少。

使用LocalDate,您甚至不必执行循环,因为 Joda Time 对计算两个值之间的差异有很好的支持。

LocalDate date1 = new LocalDate(2011, 1, 1);
LocalDate date2 = new LocalDate(2011, 1, 31);
Days period = Days.daysBetween(days1, days2);
int days = period.getDays();
于 2012-08-06T13:06:46.793 回答
2

您只是设置年、月和日。小时、分钟、秒和毫秒是当前时间(因此每次运行时都会有所不同)

我建议您改用 Joda Time 的 LocalDate ,因为它似乎完全符合您的要求。

于 2012-08-06T13:06:22.417 回答