当前位置: 首页 > 面试题库 >

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

陈文景
2023-03-14
问题内容

我使用Java 8 LocalDate和Period类来添加和删除年,月和日。为什么在某些情况下,如果将Period添加到日期并删除相同的时间,则Java
8返回另一个日期?

    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


问题答案:

为什么在某些情况下,如果将Period添加到日期并删除合理的时间,则Java 8返回另一个日期?

因为这就是日历计算的原理-几个月的长度是不均匀的,所以至少可以说很难。

您要添加“六十年,一个月,一天”到1月30日2023年你有什么期望的结果, 是?可能有多种不同的选择…从逻辑上讲,这听起来像是您所说的“
2029年2月31日”不存在…因此API将其延期至2029年3月1日。

现在从2029年3月1日 减去 六年,一个月零一天也有点模棱两可,但是将其设为2023年1月31日听起来很合理-
如果您减去6年才能得出2023年3月1日,那么再减去1个月就得出2月1日2023年,然后是1天,直到1月31日。

从根本上讲:不要指望日历算术的行为像常规数学一样。就是那样行不通。



 类似资料:
  • 我使用java 8本地日期和周期类来添加和删除年、月和日。为什么在某些情况下,如果添加周期到日期并删除相同的周期,java 8会返回另一个日期? 为什么结果是2023-01-31而不是2023-01-30

  • 我对日期及其从日期到LocalDate的转换有问题,主要错误在于1700年的日期。我试过两个不同的日期,每当1700年的时候,我就少了一天。 date dto它是一个检索查询日期的变量。但是该方法只获取dto变量作为输入参数。 我使用: 今年有什么问题?

  • 问题内容: 我想让用户使用JavaScript轻松添加和减去日期,以便按日期浏览其条目。 日期的格式为:“ mm / dd / yyyy”。我希望他们能够单击“下一步”按钮,并且如果日期为:“ 06/01/2012”,则在单击下一步时,它应该变为:“ 06/02/2012”。如果他们单击“上一个”按钮,则该按钮将变为“ 05/31/2012”。 它需要跟踪of年,每月的天数等。 有任何想法吗? 使

  • 我想让用户使用JavaScript轻松加减日期,以便按日期浏览条目。 日期的格式是:“mm/dd/yyyy”。我希望他们能够点击“下一步”按钮,如果日期是:“06/01/2012”,那么点击下一步,它应该变成:“06/02/2012”。如果他们点击“prev”按钮,那么它应该变成“05/31/2012”。 它需要跟踪闰年、一个月中的天数等。 有什么想法吗? P.S使用AJAX从服务器获取日期不是一

  • 问题内容: 我需要用mysql减去1个月零4天,我看到命令 完美适用于1个月但1个月零4天,使用31天对于每个月带来30、29、28的每月无效。我无法添加31 + 4,30 + 4,等等 问题答案: 使用 [docs] 像: