获取 Period 中的每一年 java

Get each year in a Period in java

我正在尝试为 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 的方法,这是不可能的。有没有解决的办法?是否可以使用其他方法?

您可以这样尝试使用 Java 8;

    LocalDate start = LocalDate.of(2011, Month.DECEMBER, 19);
    LocalDate end = LocalDate.now();
    while (!start.isAfter(end)) {
        System.out.println(start);
        start = start.plusYears(1);
    }
}

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

请注意,添加月份时此问题更为明显。 1 月 31 日的开始日期将 return 顺序为 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;
}

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