Java中的”月末的plusMonths”。”plusMonths”在Java中表示加上指定月数,而”月末的”则表示在当前日期的月末

一个月的最后一天加上一个月会怎样?

我对于2月没有31号这一点感到好奇,于是我尝试使用plusMonths()方法在1/31的基础上加一月份,看会有怎样的结果。

根据文件显示

这个方法通过三个步骤将指定数量添加到月份字段。
1. 将输入的月数添加到月份字段中。
2. 检查结果日期是否无效。
3. 如有需要,将月份的“日期”调整为最后一个有效日期。
例如,在2007-03-31上添加1个月将导致无效的日期2007-04-31。而不会返回无效的结果,而是选择该月的最后一个有效日期2007-04-30。

首先将月份加起来,检查是否有对应的日期。如果没有对应日期,则返回该月的最后一天。

确认

LocalDate date = LocalDate.of(2020,1,31);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,30);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,29);
System.out.println(date.plusMonths(1));
// 2020-02-29

LocalDate date = LocalDate.of(2020,1,28);
System.out.println(date.plusMonths(1));
// 2020-02-28

对于不适用的日期,返回了有效的日期。

我要说的话是……

如果在plusMonths之后再进行minusMonths,会发生什么呢?

LocalDate date = LocalDate.of(2020,1,31);
System.out.println(date.plusMonths(1).minusMonths(1));
// 2020-01-29

由于使用了plusMonths,日期变为了2020年02月29日,然后再用minusMonths减去同样的月份,所以结果变为了2020年01月29日。