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

如何在Swift中获取符合区域规则的指定年份准确周数?

如何在Swift中获取指定年份的准确周数(52或53周)

你提到的一周以周一为起始、第一周最少包含4天的规则,正好符合ISO 8601的周历标准,可以直接利用Swift的Calendar类实现需求,无需自行计算。

实现步骤与代码示例

  1. 创建符合ISO 8601规则的日历实例:
var calendar = Calendar(identifier: .iso8601)
// 可选:固定区域避免系统设置干扰,若本地规则已匹配可省略
calendar.locale = Locale(identifier: "en_US_POSIX")
  1. 编写函数获取指定年份的总周数:
func numberOfWeeksInYear(_ year: Int) -> Int? {
    // 构造该年份的最后一天(12月31日)
    guard let lastDayOfYear = calendar.date(from: DateComponents(year: year, month: 12, day: 31)) else {
        return nil
    }
    // 最后一天所在的周数即为全年总周数
    let components = calendar.date([.weekOfYear], from: lastDayOfYear)
    return components?.weekOfYear
}
  1. 验证示例:
print(numberOfWeeksInYear(2019)) // 输出 52
print(numberOfWeeksInYear(2020)) // 输出 53
print(numberOfWeeksInYear(2026)) // 输出 53

原理说明

ISO 8601周历的核心规则完全匹配你的需求:

  • 一周以周一为起始日
  • 一年的第一周必须包含当年的1月4日(即该周至少有4天属于当前年份)
  • 全年总周数由12月31日所在的周数决定——若12月31日属于第53周,则该年有53周,否则为52周

内容的提问来源于stack exchange,提问作者Peter Plass

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 10:20:38