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

时间:2016-08-30 18:57:30

标签: jodatime

要计算两个日期(日期或日历对象)之间的天数,请考虑结束日期以进行计算。

我用下面的方法:

    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);

该方法返回' 1'但我想要' 2'因为我需要考虑结束日期,也就是30和31。

对于该要求,无论该方法返回什么,或者在返回值之前,我都可以添加+1。这不是解决问题的正确方法,也需要考虑闰年日期。

请帮我解决问题。

1 个答案:

答案 0 :(得分:2)

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

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

这会自动考虑闰日,如果您想将结果添加到原始日期以达到结束日期,则此操作是正确的。但是:

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

为达到这个长度而增加一天的时间是没有错的。