【问题标题】:Adding and subtracting Period from LocalDate doesn't produce the same date从 LocalDate 添加和减去 Period 不会产生相同的日期
【发布时间】:2017-06-16 04:31:38
【问题描述】:

我使用 java 8 LocalDate 和 Period 类来添加和删除年、月和日。为什么在某些情况下如果添加 Period to date 并删除相同的 period java 8 返回另一个 date?

    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

【问题讨论】:

    标签: java java-time


    【解决方案1】:

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

    因为这就是日历算术的工作原理 - 月份的长度不均匀,至少可以说它让事情变得棘手。

    您将“六年零一个月零一天”添加到 2023 年 1 月 30 日。您希望 那个 的结果是什么?可能有多种不同的选择...从逻辑上讲,这听起来像是您的意思是“2029 年 2 月 31 日”,但实际上并不存在...因此 API 将其延期至 2029 年 3 月 1 日。

    现在从 2029 年 3 月 1 日减去六年零一个月零一天也有些模棱两可,但将其设为 2023 年 1 月 31 日听起来是合理的 - 如果你减去 6 年得到 3 月 1 日2023 年,然后 1 个月到 2023 年 2 月 1 日,然后 1 天到 1 月 31 日。

    从根本上说:不要指望日历算术表现得像常规数学。就是这样不行。

    【讨论】:

    • 感谢您的解释。但是添加迄今为止的时间段的最佳方法是什么
    • @MohammedDawood:您已经在日期中添加了句点。您所看到的实际上是不正确的?碰巧你不能通过减去相同的周期来反转那个加法。
    猜你喜欢
    • 2017-09-14
    • 2020-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-16
    • 2021-01-29
    相关资源
    最近更新 更多