2012-02-29 1 views
0

Я пишу этот код, чтобы получить воскресенье этой недели.Проблема, когда я хочу получить воскресенье этой недели

NSCalendar *cal = [NSCalendar currentCalendar]; 
NSDateComponents* components = [cal components: NSYearForWeekOfYearCalendarUnit | NSYearCalendarUnit | NSMonthCalendarUnit | NSWeekCalendarUnit | NSWeekdayCalendarUnit fromDate:[NSDate date]]; 

// I want to get the sunday 
[components setWeekday:1]; 
NSDate* d = [cal dateFromComponents:components]; 
NSLog(@"Sunday:%@", d); 

Но я получил результат: æÅ 25, 2012, я думаю, что правильный результат должен быть 26 фев 2012. Что случилось с ним?

+0

упс не возражаете, я смотрел на март. :) –

+0

Может быть, 'NSMonthCalendarUnit' отбрасывает его? –

ответ

0

Вам необходимо инициализировать несколько компонентов:

for (int i = 0; i < 12; i++) 
{ 
    [components setWeek:i]; 
    [components setWeekday:1]; 
    d = [cal dateFromComponents:components]; 
    NSLog(@"Sunday,Week %d:%@", i,d); 
} 

Output: 

Sunday,Week 0:2011-12-25 08:00:00 +0000 
Sunday,Week 1:2012-01-01 08:00:00 +0000 
Sunday,Week 2:2012-01-08 08:00:00 +0000 
Sunday,Week 3:2012-01-15 08:00:00 +0000 
Sunday,Week 4:2012-01-22 08:00:00 +0000 
Sunday,Week 5:2012-01-29 08:00:00 +0000 
Sunday,Week 6:2012-02-05 08:00:00 +0000 
Sunday,Week 7:2012-02-12 08:00:00 +0000 
Sunday,Week 8:2012-02-19 08:00:00 +0000 
Sunday,Week 9:2012-02-26 08:00:00 +0000 
Sunday,Week 10:2012-03-04 08:00:00 +0000 
Sunday,Week 11:2012-03-11 08:00:00 +0000 
+0

Странно, используя ваш код, мой вывод: Воскресенье, Неделя 0: 2011-12-24 16:00:00 +0000 Воскресенье, 1 неделя: 2011-12-31 16:00:00 +0000 Воскресенье, , Неделя 2: 2012-01-07 16:00:00 +0000 Воскресенье, Неделя 3: 2012-01-14 16:00:00 +0000 Воскресенье, Неделя 4: 2012-01-21 16:00:00 +0000 Воскресенье, Неделя 5: 2012-01-28 16:00:00 +0000 Воскресенье, Неделя 6: 2012-02-04 16:00:00 +0000 Воскресенье, Неделя 7: 2012-02-11 16 : 00: 00 +0000 Воскресенье, Неделя 8: 2012-02-18 16:00:00 +0000 Воскресенье, Неделя 9: 2012-02-25 16:00:00 +0000 Воскресенье, Неделя 10: 2012- 03-03 16:00:00 +0000 Воскресенье, 11 неделя: 2012-03-10 16:00:00 +0000 – Timesong

+0

Это странно. Вы на другой стороне международной линии дат? :) –

+0

Мой часовой пояс +8. – Timesong