需要使用Java8确定两个日期之间的月数,但无法获得正确的月数。请找到下面的程序
public static void main(String[] args) {
DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM/dd/yyyy", Locale.ENGLISH);
YearMonth startDate = YearMonth.parse("12/31/2020", formatter);
YearMonth endDate = YearMonth.parse("12/01/2021", formatter);
System.out.println(startDate.plusYears(1) + " :: " + endDate + " :: " + startDate.plusYears(1).isBefore(endDate));
long monthsBetween = ChronoUnit.MONTHS.between(startDate, endDate);
System.out.println(monthsBetween);
}
输出::
2021-12 :: 2021-12 :: false
12
因此,从上述计划中,我们将在这两个日期之间获得12个月的时间 "12/31/2020" and "12/01/2021"
但事实上,上述日期之间的月数是13,那么我们是如何得到12而不是13的呢?
也许我错了,但有人能解释一下吗
注: date format is MM/dd/yyyy
2条答案
按热度按时间lskq00tm1#
您之所以获得12个月,是因为“到”月不在统计范围内。下面是between方法的实现,
9rnv2umw2#
普拉塔普的回答完全正确。根据
between()
:该计算返回一个整数,表示两个时间单位之间的完整单位数。例如,时间11:30和13:29之间的小时数将仅为一小时,因为它比两小时少一分钟。
另一种说法是,计算中不包括月末。这反过来意味着解决方案是在月末增加一个月:
现在,输出就是您想要的:
13