【问题标题】:NSCalendar gives wrong week numbers by month in yearNSCalendar 按月给出错误的周数
【发布时间】:2015-08-21 10:41:18
【问题描述】:

我有一个函数,它根据月份和年份返回一组周数。

代码如下:

let calendar = NSCalendar.currentCalendar()
let weekRange = calendar.rangeOfUnit(NSCalendarUnit.CalendarUnitWeekOfYear, inUnit: .CalendarUnitMonth, forDate: NSDate())
weekArray = Array(weekRange.location..<weekRange.location + weekRange.length)

示例:对于 2015-08-21,它将返回 [31, 32, 33, 34, 35, 36],这是正确的,因为 this website

它工作正常但我发现一个错误如果我通过这个日期“2016-01-01”它返回 [1, 2, 3, 4, 5] 但正确的数组应该是 [53(从 2015 年开始) , 1, 2, 3, 4] (再次检查this website)。

如该网站所述:

一年的第一周 (WN 1) 是包含 1 月 4 日或一年中的第一个星期二的那一周。

所以,我必须写一些计算才能使它起作用?还是有更简单的解决方案?感谢您的帮助。

【问题讨论】:

    标签: ios swift nscalendar week-number


    【解决方案1】:

    结果取决于日历类型、区域设置和一周中的第一个工作日设置。

    上述网站上的日历基于 ISO 8601,您的 currentCalendar() 可能是公历,两种类型相似但不相同。

    请在操场上查看此内容,并尝试取消注释行并提供其他语言环境标识符。

    代码适用于 Swift 2.0,在 Swift 1.2 中使用 .CalendarUnitWeekOfYear.CalendarUnitMonth

    let components = NSDateComponents()
    components.year = 2016
    components.month = 1
    
    var weekNumbersForCalendarIdentifier = { ( identifier : String) -> [Int] in
      let calendar = NSCalendar(calendarIdentifier: identifier)!
      // calendar.locale = NSLocale(localeIdentifier: "us_POSIX")
      let weekRange = calendar.rangeOfUnit(.WeekOfYear, inUnit: .Month, forDate: calendar.dateFromComponents(components)!)
      return Array(weekRange.location..<weekRange.location + weekRange.length)
    }
    
    let resultISO = weekNumbersForCalendarIdentifier(NSCalendarIdentifierISO8601)
    let resultGregorian = weekNumbersForCalendarIdentifier(NSCalendarIdentifierGregorian)
    

    有一种特定的行为独立于不同的设置:

    NSCalendar 显示序号 0 而不是实际的 上一年的第 52 或 53 号。

    【讨论】:

    • 非常感谢,您两次拯救了我的一天!)
    • 使用“NSCalendarIdentifierGregorian”日历标识符并设置日历“locale”就可以了。让日历= NSCalendar(日历标识符:标识符)! calendar.locale = NSLocale.currentLocale()
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-04-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多