Java 从当年月份到 2021 年 1 月的 "Year-Month" 列表

List of "Year-Month" from Current Year month to Jan-2021 in Java

我有一个业务需求,需要编写一个服务,其中 returns 从 01-2021 开始到当年月份 (01-2021,02-2021,....) 的年份月份列表 (当前:02-2022).

任何人都可以建议我在 Java 8

中可以采取的解决方法

O/P:01-2021、02-2021、03-2021、04-2021 等等,02-2022。

像下面这样的东西就可以了。

YearMonth now = YearMonth.now();
YearMonth ym = YearMonth.of(2021, 1);
List<YearMonth> list = new ArrayList<>();
while (!ym.isAfter(now)) {
  list.add(ym);
  ym = ym.plusMonths(1);
}
DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-yyyy");
List<String> list2 = list.stream().map(it -> it.format(format)).collect(Collectors.toList());

应该给你一份从 2021 年到现在的清单。

另一种选择是使用流。

DateTimeFormatter format = DateTimeFormatter.ofPattern("MM-yyyy");
long months = Period.between(LocalDate.of(2021, 1, 1), LocalDate.now()).toTotalMonths();
List<String> yms = LongStream.rangeClosed(0, months)
  .mapToObj(it -> YearMonth.now().minusMonths(it))
  .map(it -> it.format(format))
  .collect(Collectors.toList());

您首先计算月数,迭代该数字并生成列表。

java.time 包有一个 YearMonth class (documentation) 非常适合这个用例:

for (YearMonth ym = YearMonth.of(2021, Month.JANUARY); // or ...of(2021, 1)
     !ym.isAfter(YearMonth.now());
     ym = ym.plusMonths(1))
{
    System.out.printf("%Tm-%1$TY\n", ym);
}
import java.time.*;
import java.time.format.DateTimeFormatter;
public class YearMonth {
    public static void getYearMonths() {

        YearMonth nextMonth = YearMonth.now().plusMonths(1);
        YearMonth yearMonth = YearMonth.of(2021, 01);
 
        while (nextMonth.isAfter(yearMonth)) {
        // Create a DateTimeFormatter string
        DateTimeFormatter formatter = DateTimeFormatter.ofPattern("MM-yyyy");
        
        // Format this year-month
        System.out.println(yearMonth.format(formatter));
        yearMonth = yearMonth.plusMonths(1);
        }
    }
}