【发布时间】:2021-03-13 14:25:57
【问题描述】:
我正在开发一个显示当前月份的日历视图(Cocoa macOS 应用程序)。当我尝试计算给定日期的周数时,我会根据日历和语言环境得到不同的结果。
对于 2021 年 1 月 1 日,一些电话返回 week 0,另一些电话返回 week 1:
let formatter = DateFormatter()
formatter.dateFormat = "yyyy-MM-dd"
let jan2021 = formatter.date(from: "2021-01-01")!
var deCalendar = Calendar(identifier: .gregorian)
deCalendar.locale = Locale(identifier: "de_de")
var usCalendar = Calendar(identifier: .gregorian)
usCalendar.locale = Locale(identifier: "en_us")
var deIsoCalendar = Calendar(identifier: .iso8601)
deIsoCalendar.locale = Locale(identifier: "de_de")
var usIso = Calendar(identifier: .iso8601)
usIso.locale = Locale(identifier: "en_us")
deCalendar.component(.weekOfMonth, from: jan2021) // 0
deIsoCalendar.component(.weekOfMonth, from: jan2021) // 0
usCalendar.component(.weekOfMonth, from: jan2021) // 1 ??
usIso.component(.weekOfMonth, from: jan2021) // 0
2021 年 1 月 1 日是星期五,所以我预计“一个月中的一周”是 0(或 1,具体取决于特定 API 是否从零开始)。
对于 2021 年 2 月 1 日,即星期一,以上所有调用均返回 week 1!
只是为了好玩,2021 年 1 月 31 日:美国/公历返回“第 6 周”,所有其他日历返回“第 4 周”。
Bug?,功能?,我错过了什么?
供参考:
【问题讨论】:
-
为什么 2 月 1 日的 weekOfMonth 不是 1? 1 月 31 日是星期日,这是美国一周的第一天
标签: swift cocoa nscalendar nsdatecomponents