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)
有人可以解释为什么吗?谢谢
因为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 个月将导致您在下个月的日期。但天数就不一样了,你真的要移动几天。