如何在Swift中获取符合区域规则的指定年份准确周数?
如何在Swift中获取指定年份的准确周数(52或53周)
你提到的一周以周一为起始、第一周最少包含4天的规则,正好符合ISO 8601的周历标准,可以直接利用Swift的Calendar类实现需求,无需自行计算。
实现步骤与代码示例
- 创建符合ISO 8601规则的日历实例:
var calendar = Calendar(identifier: .iso8601) // 可选:固定区域避免系统设置干扰,若本地规则已匹配可省略 calendar.locale = Locale(identifier: "en_US_POSIX")
- 编写函数获取指定年份的总周数:
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 }
- 验证示例:
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
相关产品推荐
相关产品推荐

