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);
}
}
}
我有一个业务需求,需要编写一个服务,其中 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);
}
}
}