2015-12-13 3 views
2
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 и ofcoaurse на следующий год недели перечисления неправильно и из-за него, что случилось с моим кодом, или это ошибка от Apple?NSDateComponents weekOfYear возвращает неправильное значение

Check start of week 53

ответ

3

Ваш minimumDaysInFirstWeek равен 1. Это означает, что любая неделя, которая имеет по крайней мере 1 день в новом году это первая неделя этого года. Docs

По ISO:

Есть взаимно эквивалентные описания недели 01:

неделю с первого четверга года в ней (формальное определение ISO ), за неделю с 4 января в ней - первую неделю с большинством (четыре или более) своих дней в начале года и неделей , начиная с понедельника в период с 29 декабря по 4 января.

Смежные вопросы