iPhone OS4.3: метод [ordinalityOfUnit: inUnit: forDate:] NSCalendar возвращает другой / неправильный результат - PullRequest
0 голосов
/ 08 апреля 2011

У меня следующий фрагмент кода, который я использую, чтобы определить первый день недели для отображения в моем представлении календаря. Этот код работал без каких-либо проблем, пока я не протестировал его на iPhone OS 4.3 и выше.

int firstDOW = [m_calendar ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:fom]%7;

где 'fom' - первая дата месяца.
При отладке кода в iOS до 4.3 возвращаемое значение для метода «ординальности», кажется, возвращает правильное значение (например, если дата «fom» выпадает на пятницу, значение, возвращаемое из вышеупомянутого метода, равно «5»). Но на iOS> = 4.3 возвращаемое значение как-то не является правильным днем ​​недели (например, если дата 'fom' выпадает на пятницу, значение, возвращаемое вышеуказанным методом, равно '6'!).
Я не понимаю, есть ли проблема с моим кодом, или это действительно ошибка в вышеуказанном методе.
Кто-нибудь еще сталкивался с таким в iOS> = 4.3 ??

Спасибо и всего наилучшего.

1 Ответ

4 голосов
/ 10 октября 2011

Я узнал немного больше об этом вызове метода. Похоже, что метод ordinalityOfUnit:inUnit:forDate: обращает внимание на то, что является текущей локалью и что эта локаль считает первым днем ​​недели.

Например. В Соединенных Штатах Америки первым днем ​​недели считается воскресенье, а в Ирландии первым днем ​​недели считается понедельник.

Если вы находитесь в США и запрашиваете порядковый номер вторника, он вернет 2 (0 для воскресенья, 1 для понедельника и 2 для вторника). Однако в локали Ирландия он вернет 1 (0 для понедельника и 1 для вторника).

Короче говоря, порядковый номер дня в неделе зависит от того, какой день считается началом недели. Напротив, если вы используете API NSDateComponents и получаете оттуда день недели, вы всегда получаете день относительно воскресенья === 0. Например,

NSDateComponents *components = [[self calendar] components: NSWeekdayCalendarUnit fromDate: [self startingDay]];
NSUInteger weekdayIndex = [components weekday];
...