gpt4 book ai didi

ios - NSCalendar 按年按月给出错误的周数

转载 作者:可可西里 更新时间:2023-11-01 00:37:24 27 4
gpt4 key购买 nike

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

代码如下:

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 )。

如该网站所述:

The first week of the year (WN 1) is the week containing january 4th or the first tuesday of the Year.

那么,我必须写一些计算才能让它起作用吗?或者有更简单的解决方案?感谢您的帮助。

最佳答案

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

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

请在 playground 中检查这一点,并尝试取消对注释行的注释并提供其他区域设置标识符。

此代码适用于 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 displays the ordinal number 0 rather than the actual number 52 or 53 of the preceding year.

关于ios - NSCalendar 按年按月给出错误的周数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32138295/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com