Как получить номер недели из NSDate последовательно во всех версиях iOS?
Я использую следующее, чтобы получить номер недели из NSDate:
[[calendar components: NSWeekCalendarUnit fromDate:date] week]
К сожалению, я получаю разные значения в разных версиях iOS. Значения, возвращаемые iOS 4. * и 5, отличаются на 1. Есть ли способ получить номер недели последовательно?
Ответы
Ответ 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.