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 月底。一天的差异是很自然的,是由于关于 长度(闭区间) 与 日期添加所需的持续时间 的不同概念。
将持续时间增加一天以达到长度并没有错。
要计算两个日期(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 月底。一天的差异是很自然的,是由于关于 长度(闭区间) 与 日期添加所需的持续时间 的不同概念。
将持续时间增加一天以达到长度并没有错。