Вы используете NSWeekOfYearCalendarUnit
, поэтому вы должны использовать соответствующую большую единицу измерения, NSYearForWeekOfYearCalendarUnit
.
NSCalendar *calendar = [NSCalendar currentCalendar];
calendar.firstWeekday = 2;
calendar.minimumDaysInFirstWeek = 4;
int n = [calendar rangeOfUnit:NSWeekOfYearCalendarUnit inUnit:NSYearForWeekOfYearCalendarUnit forDate: [NSDate date]].length;
NSLog(@"%d", n); // 52
Наконец, обратите внимание, что NSWeekOfYearCalendarUnit
и NSYearForWeekOfYearCalendarUnit
предназначены только для iOS 5.0 и OS X 10.7.
Редактировать
As@lnafziger, если вы используете дату календарной недели предыдущего года или следующего года, например, 01.01.2016, будет подсчитано количество недель в этом году (в примере 2015), а нефактический год даты (например, 2016).Если это не то, что вы хотите, вы можете изменить дату следующим образом:
NSDateComponents *components = [calendar components:NSYearCalendarUnit fromDate:date];
components.month = 3;
date = [calendar dateFromComponents:components];