Java LocalDate 在调用 plusDays plusMonths 和 plusYears 时得到两种不同的结果

atb*_*rov 1 java java-8 java-time localdate

大家好,我有这样的代码

public static void main(String[] args) {
    System.out.println(LocalDate.now().plusYears(1).plusMonths(6).plusDays(5));
    System.out.println(LocalDate.now().plusDays(5).plusMonths(6).plusYears(1));
}
Run Code Online (Sandbox Code Playgroud)

我得到两个不同的结果

2022-10-31
2022-11-01
Run Code Online (Sandbox Code Playgroud)

有人可以解释为什么吗?谢谢

Jea*_*nès 5

因为plusDays与给定的月份有关......

假设您在 9 月 26 日,添加 5 天将得到 10 月 1 日。

如果您在 8 月 26 日,则将您带到 8 月 31 日。

日期的算术不是数字的算术......一个月是一个月,并且不能在天数中转换。

请参阅有关plusMonths例如的文档:

public LocalDate plusMonths(长月ToAdd)

...

例如,2007-03-31 加上一个月将导致无效日期 2007-04-31。不是返回无效结果,而是选择了该月的最后一个有效日期 2007-04-30。

这是普遍预期的,在日期上增加 1 个月将导致您在下个月的日期。但天数就不一样了,你真的要移动几天。