gpt4 book ai didi

java-8 - 如何在纯 Java 8 中获取给定日历周的所有周日期列表?

转载 作者:行者123 更新时间:2023-12-02 21:13:22 25 4
gpt4 key购买 nike

plenty examples如何使用 Joda-Time 和旧的 java.util.Calendar/java.util.Date API 完成类似的事情,但是有没有完整的示例说明如何使用纯 java.time API 来实现它,而无需任何额外的依赖项。

还有很多例子,如何为给定的两个日期生成日期。但我无法找到如何生成给定年份和日历周数的周日期的完整示例。

您能否提供一个在纯 Java 8/java.time API 中执行此操作的示例?

最佳答案

纯 Java 8/java.time 解决方案

public static List<LocalDate> datesListOfCalendarWeek(int year, long calendarWeek) {
LocalDate start = LocalDate.ofYearDay(year,1)
.with(IsoFields.WEEK_OF_WEEK_BASED_YEAR, calendarWeek)
.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));

return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

与 Joda-Time 解决方案比较:

public static List<org.joda.time.LocalDate> datesListOfCalendarWeek(int year, int calendarWeek) {
org.joda.time.LocalDate start = new org.joda.time.LocalDate(year,1,1)
.withWeekOfWeekyear(calendarWeek).withDayOfWeek(1);
return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

显然,对于任何给定的 LocalDate,解决方案如下所示:

/* Pure Java 8 / java.time */
public static List<LocalDate> datesListOfCalendarWeek(LocalDate date) {
LocalDate start = date.with(TemporalAdjusters.previousOrSame(DayOfWeek.MONDAY));
return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

/* Joda-Time */
public static List<org.joda.time.LocalDate> datesListOfCalendarWeek(org.joda.time.LocalDate date) {
org.joda.time.LocalDate start = date.withDayOfWeek(1);
return IntStream.range(0, 7).mapToObj(start::plusDays).collect(toList());
}

关于java-8 - 如何在纯 Java 8 中获取给定日历周的所有周日期列表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187373/

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