Подтвердить что ты не робот

Как получить номер недели из NSDate последовательно во всех версиях iOS?

Я использую следующее, чтобы получить номер недели из NSDate:

[[calendar components: NSWeekCalendarUnit fromDate:date] week]

К сожалению, я получаю разные значения в разных версиях iOS. Значения, возвращаемые iOS 4. * и 5, отличаются на 1. Есть ли способ получить номер недели последовательно?

4b9b3361

Ответ 1

Поскольку iOS5 NSCalender dosent, по-видимому, определяет по умолчанию ISO 8601 по умолчанию. Вам нужно установить свой каландр с помощью метода "setMinimumDaysInFirstWeek", чтобы получить ожидаемый результат номера недели.

[yourCalender setMinimumDaysInFirstWeek:4];

"4" означает четверг в этом случае.

http://en.wikipedia.org/wiki/ISO_week_date "Первая неделя года - это неделя, которая содержит первый четверг года".

Я не знаю, почему он не определен как "4" по умолчанию в iOS5. Только один из этих странных "ошибок", я думаю;)

И да, это будет работать как в iOS 4, так и в 5.

Ответ 2

iOS5 представляется неправильным, ID ошибки # 10412573.

Резюме:   В неделю iOS5 NSDateComponents сообщается неверная неделя с NSWeekCalendarUnit и NSWeekOfYearCalendarUnit.

Шаги по воспроизведению:

NSCalendar *calendar = [NSCalendar currentCalendar];
NSDate *date = [NSDate date];
NSLog(@"week: %i", [[calendar components: NSWeekCalendarUnit fromDate:date] week]);
NSLog(@"week: %i", [[calendar components: NSWeekOfYearCalendarUnit fromDate:date] weekOfYear]);

Ожидаемые результаты: Номер той же недели на iOS4 и iOS5. На 11/8/2011 неделя должна быть 45.

Фактические результаты: Тот же номер недели на iOS5. На 11/8/2011 неделя должна быть 46.

регрессия:   iOS4 верен, iOS5 неверен.

Ответ 3

Нумерация недель стандартизируется ISO 8601.

Готов поспорить, что iOS5 верна и что для iOS4 была зарегистрирована ошибка.

Возможное решение - добавить обходное решение, которое исправляет ошибку iOS4.