0

需要使用 java 8 确定两个日期之间的月数,但没有得到正确的月数。请在下面找到程序

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

4

2 回答 2

0

您获得 12 个月的原因是因为“至”月不包括在内。这是 between 方法的实现,

 //-----------------------------------------------------------------------
    @Override
    public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) {
        return temporal1Inclusive.until(temporal2Exclusive, this);
    }
于 2021-07-09T07:18:35.573 回答
0

pratap 的答案是完全正确的。从以下文档between()

计算返回一个整数,表示两个时间之间的完整单元数。例如,时间 11:30 和 13:29 之间的小时数将只有一小时,因为它比两小时短一分钟。

另一种说法是结束月份不包括在计算中。这反过来意味着解决方案是将一个月添加到月底:

    long monthsBetween = ChronoUnit.MONTHS.between(startDate, endDate.plusMonths(1));

现在输出是你想要的:

13

于 2021-07-09T08:24:16.390 回答