如何通过 Java 中的月份和年份的周数来获取日期范围?

How to get daterange by having week number of the month and the year in Java?

假设我们有数据“September2021W5”,其中 W5 是 September2021 的周数。当然,我可以编写自定义方法来拆分并分别获取 年、月和月份的周数 。 我们如何获得日期范围,即特定一周的开始日期和结束日期。 我 检查了其他类似的问题 但他们都解决了为年而不是月指定周数的情况。 在此先感谢您提供的任何指导或帮助!!!

import java.time.DayOfWeek;
import java.time.LocalDate;
import java.time.temporal.ChronoField;

public class HelloWorld
{
     public static void main(String []args)
     {
        // your input date
        LocalDate localDate = LocalDate.of(2022, 9, 30);

        // ensure week 5
        LocalDate week = localDate.with(ChronoField.ALIGNED_WEEK_OF_MONTH, 5);

        // get localDate for first and last day
        LocalDate start = week.with(DayOfWeek.MONDAY);
        LocalDate end = start.plusDays(6);
        System.out.println(start +" - "+ end);
    }
}

构建一个 DateTimeFormatter,根据需要使用默认的星期几(一周的开始,例如星期一)。
示例:

var format = new DateTimeFormatterBuilder()
             .appendPattern("MMMMuuuu'W'W")   // or use corresponding appends
             .parseDefaulting(ChronoField.DAY_OF_WEEK, DayOfWeek.MONDAY.getValue())
             .toFormatter()
             .withLocale(Locale.US);
var date = LocalDate.parse("September2021W5", format);

周末可以做同样的事情,或者只是在之前的结果基础上增加 6 天 (date.plusDays(6))


MMMM 表示一年中的月份,完整形式
uuuu
'W' 用于文字 W
W 一个月中的第几周

使用 Locale.UK 以便为该语言环境解析月份,使用给定输入所需的月份 - 要使用默认系统语言环境,请使用 Locale.getDefault().