从日期中添加和减去期间时的意外行为

问题描述 投票:0回答:0

我在进行日期/时间计算时遇到了一些意想不到的行为。当谈到夏令时或闰年时,操作顺序(月/日/小时)确实很重要,这是很明显的。但是java.time.Period的加减好像运算顺序不是确定的?

为了更清楚地说明我在这里的意思,我在其中添加和减去日期的同一时期:

public static void main(String[] args) {
    Period period = Period.ofDays(365).plus(Period.ofYears(1));
    LocalDate dateA = LocalDate.of(2020, 4, 24);
    LocalDate dateA2 = dateA.minus(period).plus(period);
    LocalDate dateA3 = dateA.plus(period).minus(period);
    System.out.println(dateA);
    System.out.println(dateA2);
    System.out.println(dateA3);

    System.out.println("---");

    LocalDate dateB = LocalDate.of(2022, 4, 24);
    LocalDate dateB2 = dateB.minus(period).plus(period);
    LocalDate dateB3 = dateB.plus(period).minus(period);
    System.out.println(dateB);
    System.out.println(dateB2);
    System.out.println(dateB3);
}

输出是

2020-04-24
2020-04-23
2020-04-24
---
2022-04-24
2022-04-24
2022-04-23

我原以为加法和减法会相互取反,所以加减相同的 Period 总是会得到初始日期,但事实并非如此。 (我假设在减去时需要将执行顺序从年/月/日交换到天/月/年)

这是错误还是预期的?

java java-time period
© www.soinside.com 2019 - 2024. All rights reserved.