You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何根据年份与周数获取对应的LocalDate起止日期?

根据年份和周数获取起止LocalDate日期的实现方法

在Java 8及以上版本中,推荐使用自带的java.time日期API来实现该需求,该API设计更合理且线程安全,完全不需要依赖第三方库。

核心实现思路

ISO标准中,一周从周一开始,第1周是包含当年第一个周四的那周,这正好匹配你给出的示例(2022年第49周为12月5日-12月11日)。我们可以通过WeekFields类指定周规则,结合LocalDate的方法快速定位到目标周的起止日期。

完整代码实现

import java.time.LocalDate;
import java.time.temporal.WeekFields;

public class WeekDateHandler {

    // 获取指定年份周数的起始日期(周一)
    public static LocalDate getWeekStart(int year, int week) {
        return LocalDate.of(year, 1, 1)
                .with(WeekFields.ISO.weekOfYear(), week)
                .with(WeekFields.ISO.dayOfWeek(), 1);
    }

    // 获取指定年份周数的结束日期(周日)
    public static LocalDate getWeekEnd(int year, int week) {
        // 起始日期加6天即为周日,也可以直接用dayOfWeek(7)定位
        return getWeekStart(year, week).plusDays(6);
    }

    public static void main(String[] args) {
        // 测试示例参数
        int targetYear = 2022;
        int targetWeek = 49;
        
        LocalDate startDate = getWeekStart(targetYear, targetWeek);
        LocalDate endDate = getWeekEnd(targetYear, targetWeek);
        
        System.out.printf("起始日期:%s\n结束日期:%s", startDate, endDate);
        // 输出:
        // 起始日期:2022-12-05
        // 结束日期:2022-12-11
    }
}

关键细节说明

  • 周规则自定义:如果你的业务场景中一周以周日为起始(比如美国地区),可以将WeekFields.ISO替换为WeekFields.of(Locale.US),此时dayOfWeek(1)对应周日,dayOfWeek(7)对应周六。
  • 跨年周处理:API会自动处理跨年的周数,比如2023年第1周,实际起始日期是2022年12月26日,无需额外逻辑判断。
  • 参数合法性:如果传入的周数超出该年份的有效范围(比如2022年最多52周),API会自动调整到对应年份的有效周数(比如传入53周会返回2023年第1周的日期),如果需要严格校验,可以在方法中添加周数范围判断。

内容的提问来源于stack exchange,提问作者Jsef bch

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.09 08:45:30