【发布时间】:2013-02-18 16:38:16
【问题描述】:
我正在使用下面的NSCalendar 方法来获取一个日历年的天数:
NSRange range = [gregorian rangeOfUnit:NSDayCalendarUnit
inUnit:NSYearCalendarUnit
forDate:date];
我期待 range.length 返回类型为 NSRange 的值,即 365 或 366(天)。
但是,对于日期值2005-06-06,此代码返回31 中的range.length。
我的代码有什么问题?
这是完整的sn-p代码:
NSCalendar *gregorian = [[NSCalendar alloc]
initWithCalendarIdentifier:NSGregorianCalendar];
[subArray enumerateObjectsUsingBlock:
^(NSDate *date, NSUInteger idx, BOOL *stop) {
NSUInteger numberOfDays = [gregorian ordinalityOfUnit:NSDayCalendarUnit
inUnit:NSYearCalendarUnit forDate:date];
}];
【问题讨论】:
-
您将永远得到 31 对于任何一个月。
-
是的,我在任何年份都尝试过,任何月份它总是显示 31。一旦我更改了 NSMonthCalenderUnit 天数是正确的。!!!要么我们遗漏了什么,要么这个 API 有一些错误。
-
该方法工作正常。它计算一个单位在一个较大单位的时间跨度内的可能值的范围。每年有一个月有 31 天。
标签: objective-c cocoa-touch cocoa nsdate nscalendar