gpt4 book ai didi

java - LocalDate.plus 错误答案

转载 作者:太空狗 更新时间:2023-10-29 22:33:15 24 4
gpt4 key购买 nike

Java 的 LocalDate API 在用很长的 Period 调用 plus(...) 时似乎给出了错误的答案,我因一个错误而失败.我在这里做错了什么吗?

import java.time.LocalDate;
import java.time.Month;
import java.time.Period;
import java.time.temporal.ChronoUnit;

public class Main
{
public static void main(String[] args)
{
// Long Period
LocalDate birthA = LocalDate.of(1965, Month.SEPTEMBER, 27);
LocalDate eventA = LocalDate.of(1992, Month.MAY, 9);
LocalDate halfA = eventA.plus(Period.between(birthA, eventA));
System.out.println(halfA); // 2018-12-21 ????
System.out.println(ChronoUnit.DAYS.between(birthA, eventA)); // 9721
System.out.println(ChronoUnit.DAYS.between(eventA, halfA)); // 9722 ????

// Short Period
LocalDate birthB = LocalDate.of(2012, Month.SEPTEMBER, 10);
LocalDate eventB = LocalDate.of(2012, Month.SEPTEMBER, 12);
LocalDate halfB = eventB.plus(Period.between(birthB, eventB));
System.out.println(halfB); // 2018-09-14
System.out.println(ChronoUnit.DAYS.between(birthB, eventB)); // 2
System.out.println(ChronoUnit.DAYS.between(eventB, halfB)); // 2
}
}

最佳答案

Period 由若干年、月和日组成。在您的例子中,Period.between(birthA, eventA) 是 26 年 7 个月零 12 天。

如果将其添加到 birthA,您将获得:

  • 1965 + 26 岁 -> 1991
  • 1991 年 9 月 + 7 个月 -> 1991 年 4 月
  • 1991 年 4 月 27 日 + 12 天 -> 1992 年 5 月 9 日

按预期工作。

如果您应用相同的计算,从 1992 年 5 月 9 日开始,您将得到 2018 年 12 月 21 日。

如果您想改为添加特定天数,则不能简单地添加句点(因为年和月的长度并不总是相同)。一种选择是改用 ChonoUnit.DAYS.between:

LocalDate halfA = eventA.plusDays(ChronoUnit.DAYS.between(birthA, eventA));

这将返回 2018-12-20,我认为这正是您所期望的。

关于java - LocalDate.plus 错误答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56080506/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com