NSDateFormatter и NSDateComponents возвращают разные значения для номера недели

Я создаю приложение, которое создает расписание. Вы можете создавать новую каждую неделю в году. Когда приложение завершит загрузку, ему необходимо загрузить текущую неделю (например: если это 1 января, нужно показать 1-ю неделю). Я использую NSDateFormatter для определения текущей недели.

NSDateFormatter

(Я тестировал это 9 августа 2016 года)

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; [dateFormatter setDateFormat:@"ww"]; int currentWeek = [[time stringFromDate:[NSDate date]] intValue]; 

Я хотел проверить, работает ли он, поэтому я использовал NSLog.

 NSLog(@"%i", currentWeek); 

Он вернул 32 .

NSDateComponents

Поэтому NSDateFormatter считает, что текущей неделе 32 . Все идет нормально. Приложение должно отправить push-уведомление, чтобы сообщить пользователю, что начнется определенный период. Таким образом, приложение планирует уведомление с использованием NSDateComponents.

 // Setting the notification's fire date. NSCalendar *calendar = [[NSCalendar alloc] initWithCalendarIdentifier:NSCalendarIdentifierGregorian]; NSDateComponents *dateComps = [[NSDateComponents alloc] init]; [dateComps setWeekday:3]; // Because it's on a Tuesday [dateComps setWeekOfYear:currentWeek]; // 32 [dateComps setYear:2016]; [dateComps setHour:12]; [dateComps setMinute:20]; NSDate *theFireDate = [calendar dateFromComponents:dateComps]; // Creates the notification. UILocalNotification *Alert = [[UILocalNotification alloc] init]; Alert.timeZone = [NSTimeZone defaultTimeZone]; Alert.alertBody = @"This is a message!"; Alert.fireDate = theFireDate; [[UIApplication sharedApplication] scheduleLocalNotification:Alert]; 

И я также использовал NSLog.

 NSLog(@"%@", theFireDate); 

Но он вернулся 2016-08-02 12:20:00 +0000 который не является текущей. Фактически это текущая дата минус 7 дней или неделя раньше. Значит ли это, что на текущей неделе на самом деле 33 вместо 32 , что означает, что NSDateFormatter не так? Или это фактически 32 что означает, что NSDateComponents ошибочен. И что вызывает разницу между этими двумя?