首页 > 解决方案 > Java LocalDate 在调用 plusDays plusMonths 和 plusYears 时得到两个不同的结果

问题描述

大家好,我有这样的代码

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));
}

我得到两个不同的结果

2022-10-31
2022-11-01

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

标签: javajava-8java-timelocaldate

解决方案


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

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

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

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

参见文档plusMonths,例如:

public LocalDate plusMonths(long monthsToAdd)

...

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

这是通常所期望的,将 1 个月添加到日期将导致您到达下个月的日期。但是几天不一样,你真的要移动几天。


推荐阅读