java 中的天数计算逻辑也考虑结束日期

Consider end date also for days calculation logic in java

要计算两个日期(Date 或 Calendar 对象)之间的天数,还要考虑计算结束日期。

我使用了以下方法:

    public static int daysBetween(Date d1, Date d2) { 
return Days.daysBetween( new LocalDate(d1.getTime()), new LocalDate(d2.getTime())).getDays(); 
}

例如

    Date d1 = new Date(); // 30-08-2016
Calendar c= Calendar.getInstance();
c.add(Calendar.YEAR, 2016);
c.add(Calendar.MONTH, Calendar.AUGUST);
c.add(Calendar.DAY_OF_MONTH, 31)// 31-08-2016
Date d2 = c.getTime();

daysBetween(d2, d1);

方法 returns '1' 但我想要 '2' 因为我需要考虑结束日期也意味着 30 和 31.

对于该要求,我可以在任何方法 returns 或返回值之前添加 +1。这不是解决问题的正确方法,还需要考虑闰年。

请帮我解决问题。

我不会混淆两个不同的库,这里是 Joda-Time 和 java.util.Calendar/Date。相反,可以在 Joda-Time 中以这种方式评估从今天到 8 月底之间的天数:

Days.daysBetween(LocalDate.now(), new LocalDate(2016, 8, 31)).getDays(); // 30

这会自动考虑闰日,如果您想将结果添加到原始日期以获得结束日期,则此方法是正确的。然而:

关闭日期间隔的长度与另外必要的经过天数不同。对于这种情况,您只需添加一天来确定开始和结束之间的长度(含)。例如,八月有 [2016-08-31] - [2016-08-01] + 1 = 31 - 1 + 1 = 31 天,但您只需将 8 月 1 日加上 30 天即可得到 8 月底。一天的差异是很自然的,是由于关于 长度(闭区间) 日期添加所需的持续时间 的不同概念。

将持续时间增加一天以达到长度并没有错。