从LocalDate添加和减去Period不会产生相同的日期

4 java java-time

我使用java 8 LocalDate和Period类来添加和删除年,月和日.为什么在某些情况下如果添加Period到date并删除相同的句点java 8又返回另一个日期?

    LocalDate date = LocalDate.of(2023, 1, 30);
    Period period = Period.of(6, 1, 1);
    System.out.println(date.plus(period).minus(period));
Run Code Online (Sandbox Code Playgroud)

为什么结果是2023-01-31而不是2023-01-30

Jon*_*eet 10

为什么在某些情况下如果添加Period到date并删除sane期间java 8又返回另一个日期?

因为这就是日历运算的工作原理 - 几个月的长度是不均匀的,而且至少可以说事情很棘手.

您要添加"六十年,一个月,一天"到1月30日2023年你有什么期望的结果,是?可能存在多种不同的选项......从逻辑上讲,它听起来像是指"2029年2月31日",它不存在......所以API将它推到2029年3月1日.

现在减去六年,一个月,从3月1日1天2029也有些模糊,但它听起来很合理,使其2023年1月31日-如果你减去6年到2023 3月1日,那么1个月到2月1日2023年,然后1天你到1月31日.

从根本上说:不要指望日历算法表现得像常规数学.它只是不起作用.

  • @MohammedDawood:你已经在约会时添加一段时间了.你所看到的实际上是什么不正确?碰巧你不能通过减去相同的时期来逆转这个加法. (2认同)