0

カレンダービューに表示するために、週の最初の日を推測するために使用しているコードスニペットに従っています。このコードは、iPhone OS 4.3 以降でテストするまで問題なく動作していました。

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

ここで、'fom' は月の最初の日付です。
4.3 より前の iOS でコードをデバッグすると、「ordinality」メソッドの戻り値は正しい値を返すようです (たとえば、「fom」の日付が金曜日の場合、上記のメソッドから返される値は「5」です)。しかし、iOS >= 4.3 では、戻り値が正しい曜日ではありません (たとえば、'fom' の日付が金曜日の場合、上記のメソッドから返される値は '6' です!)。
私のコードに問題があるのか​​ 、それとも上記の方法のバグなのかわかりません。
他の誰かが iOS >= 4.3 でこれに直面しましたか??

ありがとうございます。

4

1 に答える 1

4

このメソッド呼び出しについてもう少し学びました。このordinalityOfUnit:inUnit:forDate:メソッドは、現在のロケールが何であるか、およびそのロケールが週の最初の曜日を何と見なしているかに注意を払っているようです。

例えば。米国のロケールでは、週の最初の日は日曜日と見なされますが、アイルランドのロケールでは、週の最初の日は月曜日と見なされます。

米国ロケールで火曜日の序数を尋ねると、2 が返されます (日曜日は 0、月曜日は 1、火曜日は 2)。ただし、アイルランド ロケールでは、1 が返されます (月曜日は 0、火曜日は 1)。

要するに、週内の日の順序性は、どの日が週の始まりと見なされるかによって異なります。対照的に、NSDateComponents API を使用してそこから曜日を取得すると、常に日曜日 === 0 を基準とした日付が取得されます。例

NSDateComponents *components = [[self calendar] components: NSWeekdayCalendarUnit fromDate: [self startingDay]];
NSUInteger weekdayIndex = [components weekday];
于 2011-10-10T18:32:10.100 に答える