未从两个日期获取有效的月数

py49o6xq  于 2021-08-20  发布在  Java
关注(0)|答案(2)|浏览(287)

需要使用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

lskq00tm

lskq00tm1#

您之所以获得12个月,是因为“到”月不在统计范围内。下面是between方法的实现,

//-----------------------------------------------------------------------
    @Override
    public long between(Temporal temporal1Inclusive, Temporal temporal2Exclusive) {
        return temporal1Inclusive.until(temporal2Exclusive, this);
    }
9rnv2umw

9rnv2umw2#

普拉塔普的回答完全正确。根据 between() :
该计算返回一个整数,表示两个时间单位之间的完整单位数。例如,时间11:30和13:29之间的小时数将仅为一小时,因为它比两小时少一分钟。
另一种说法是,计算中不包括月末。这反过来意味着解决方案是在月末增加一个月:

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

现在,输出就是您想要的:
13

相关问题