gpt4 book ai didi

java - 在java中获取 Period 中的每一年

转载 作者:搜寻专家 更新时间:2023-11-01 02:05:44 24 4
gpt4 key购买 nike

我正在尝试为 Period 中的每一年获取一个 LocalDate 实例。例如,为此:

LocalDate today = LocalDate.now();
LocalDate birthday = LocalDate.of(2011, Month.DECEMBER, 19);
Period period = Period.between(birthday, today);

我想要 2012-12-19、2013-12-19、2014-12-19、2015-12-19。鉴于 Period 的方法,这是不可能的。有没有解决的办法?是否可以使用其他方法?

最佳答案

循环日期时必须小心。 “明显”的解决方案无法正常工作。 Soorapadman 的解决方案在给定日期(12 月 19 日)可以正常工作,但如果开始日期是 2 月 29 日,则会失败。这是因为1年后是28日,即使再有一个闰年,日期也永远不会回到2月29日。

请注意,这个问题在添加月份时更为明显。 1 月 31 日的开始日期将返回 2 月 28 日(或 29 日)的序​​列,然后是 3 月 28 日和 4 月 28 日,依此类推。这不太可能是所需的输出,可能是每个月的最后一天。

正确的策略如下:

public List<LocalDate> datesBetween(LocalDate start, LocalDate end, Period period);
List<LocalDate> list = new ArrayList<>();
int multiplier = 1;
LocalDate current = start;
while (!current.isAfter(end)) {
current = start.plus(period.multipliedBy(multiplier);
list.add(current);
multiplier++;
}
return list;
}

请注意该策略如何向相同 开始日期添加递增期。开始日期永远不会改变。使用相同的开始日期对于保持该日期的正确月份长度至关重要。

关于java - 在java中获取 Period 中的每一年,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34367618/

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