Неправильный компонент даты недели на IOS5

Формат моего региона — США, и я получаю номера недель, отличные от тех, которые я получаю в Mac OSx, которые также находятся в США. Я использую iOS 5 и не программировал на iOS до этой версии SDK. Так что я просто хочу убедиться, что я не делаю что-то неправильно. С этим кодом ниже я получаю за последнюю неделю года число 53, которое я считаю неправильным. Мой первый день недели установлен на воскресенье. Пожалуйста, совет, спасибо.

 NSCalendar* calendar = [NSCalendar currentCalendar];
    NSDate *date = [NSDate date];


    NSDateComponents *dateComponents = [calendar components:( NSWeekCalendarUnit) fromDate:date ];
    int week = (int)[dateComponents week];


    NSLog(@"%i", week);

Будучи [датой NSDate] 8 декабря, он возвращает номер недели 50, но в Mac OSX я получаю неделю 49.


person the Reverend    schedule 08.12.2011    source источник
comment
что такое self? объект NSDate? Я думаю, вам нужно показать больше кода, чем это. Я хотел бы узнать, как вы настраиваете NSDate, который вы передаете своему объекту dateComponents.   -  person Michael Dautermann    schedule 08.12.2011
comment
спасибо, это категория на NSDate, так что я - это дата, я отредактировал, чтобы упростить код   -  person the Reverend    schedule 08.12.2011


Ответы (2)


Во-первых, я вижу, вы изменили свой код, чтобы избавиться от ерунды 'gregorianCalendar'. Хорошо.

Когда я попробовал ваш код в тестовом приложении:

NSCalendar *calendar = [NSCalendar currentCalendar]; 
NSDateComponents *dateComponents = [calendar components:( NSWeekCalendarUnit) fromDate:[NSDate date]];
int week = (int)[dateComponents week];
[calendar release];
NSLog( @"week is %d", week);
return week;

Я получаю 49 (что имеет смысл для меня).

Если вы получаете 53, значит, вы ошиблись датой.

person Michael Dautermann    schedule 08.12.2011
comment
Я получаю 50 с этим кодом, какую версию SDK вы используете? - person the Reverend; 08.12.2011
comment
Я получаю 50 с этим кодом в XCode 4.2.X и iOS 5... Я получаю 49 с тем же кодом в XCode 3.2.6 и iOS 4.3 SDK. Интересная разница в поведении, да? - person Michael Dautermann; 08.12.2011
comment
Я думаю, что это больше похоже на ошибку, я записал ее на всякий случай: ошибка № 10549802. Я не могу придумать сценарий, где последняя неделя равна 53. В Европе они используют нашу неделю-1, а не +1 - person the Reverend; 08.12.2011

Вы проверили локаль? Например, бывают случаи, когда номера недель различаются между США и Европой.

person Maciej Swic    schedule 18.04.2012