从 LocalDate 添加和减去 Period 不会产生相同的日期
Adding and subtracting Period from LocalDate doesn't produce the same date
我使用 java 8 LocalDate 和 Period 类 添加和删除年、月和日。为什么在某些情况下,如果将期间添加到日期并删除同一期间 java 8 return 另一个日期?
LocalDate date = LocalDate.of(2023, 1, 30);
Period period = Period.of(6, 1, 1);
System.out.println(date.plus(period).minus(period));
为什么结果是 2023-01-31 而不是 2023-01-30
Why in some cases if add Period to date and remove the sane period java 8 return another date?
因为这就是日历算法的工作原理 - 月份的长度不均匀,至少可以说这让事情变得棘手。
您要将 "six years, one month, one day" 添加到 2023 年 1 月 30 日。您希望 that 的结果是什么?可能有多种不同的选择...从逻辑上讲,这听起来像是 "February 31st 2029" 不存在...所以 API 将其滚动到 2029 年 3 月 1 日。
现在减去从2029年3月1日算起的六年一个月零一天也有点模棱两可,但是把它变成2023年1月31日听起来是合理的——如果你减去6年到 2023 年 3 月 1 日,然后 1 个月到 2023 年 2 月 1 日,然后 1 天到 1 月 31 日。
从根本上说:不要指望历法算术表现得像常规数学。它只是行不通。
我使用 java 8 LocalDate 和 Period 类 添加和删除年、月和日。为什么在某些情况下,如果将期间添加到日期并删除同一期间 java 8 return 另一个日期?
LocalDate date = LocalDate.of(2023, 1, 30);
Period period = Period.of(6, 1, 1);
System.out.println(date.plus(period).minus(period));
为什么结果是 2023-01-31 而不是 2023-01-30
Why in some cases if add Period to date and remove the sane period java 8 return another date?
因为这就是日历算法的工作原理 - 月份的长度不均匀,至少可以说这让事情变得棘手。
您要将 "six years, one month, one day" 添加到 2023 年 1 月 30 日。您希望 that 的结果是什么?可能有多种不同的选择...从逻辑上讲,这听起来像是 "February 31st 2029" 不存在...所以 API 将其滚动到 2029 年 3 月 1 日。
现在减去从2029年3月1日算起的六年一个月零一天也有点模棱两可,但是把它变成2023年1月31日听起来是合理的——如果你减去6年到 2023 年 3 月 1 日,然后 1 个月到 2023 年 2 月 1 日,然后 1 天到 1 月 31 日。
从根本上说:不要指望历法算术表现得像常规数学。它只是行不通。