NSDateComponents weekOfYear返回错误的值

时间:2015-12-13 09:15:26

标签: objective-c nsdate nscalendar nsdatecomponents

NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierISO8601];
[calendar setTimeZone:[NSTimeZone defaultTimeZone]];
[calendar setFirstWeekday:2];
[calendar setMinimumDaysInFirstWeek:1];

NSDateComponents *mockTodayComponents = [[NSDateComponents alloc] init];
mockTodayComponents.day = 28;
mockTodayComponents.month = 12;
mockTodayComponents.year = 2015;
NSDate *date = [calendar dateFromComponents:mockTodayComponents];
NSDateComponents *c = [calendar components:NSCalendarUnitWeekOfYear | NSCalendarUnitYearForWeekOfYear fromDate:date];

NSInteger week = [c weekOfYear];

一周返回1而不是53,并且因为它错误地导致明年的枚举错误,我的代码有什么问题或它是Apple的错误?

Check start of week 53

1 个答案:

答案 0 :(得分:3)

您的minimumDaysInFirstWeek是1.这意味着新年至少有一天的任何一周都是该年的第一周。 Docs

根据ISO

  

第01周有相互对应的描述:

     这一周是第一个星期四的一周(正式的ISO   定义),本周1月4日,第一周与   在开始年份和周中的大部分时间(四次或更多次)   从12月29日至1月4日的星期一开始。