2013-06-01 6 views
5

私はので、私はNSCalendar、firstWeekdayを設定しても計算結果に影響しないのはなぜですか?

[[NSCalendar currentCalendar] setFirstWeekday:2]; 
を使用して、月曜日に開始するように、それを設定したいが、カレンダーに応じて、週は日曜日

にsomwhere月曜日に主演することができ、与えられた日付の曜日を計算する必要があります

ただし、計算結果は同じ

{ 
    [[NSCalendar currentCalendar] setFirstWeekday:1]; 
    NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 
    NSInteger weekday = [weekdayComponents weekday] - 1; 
    NSLog(@"%d", weekday); 
} 
{ 
    [[NSCalendar currentCalendar] setFirstWeekday:2]; 
    NSDateComponents *weekdayComponents = [[NSCalendar currentCalendar] components:(NSDayCalendarUnit | NSWeekdayCalendarUnit) fromDate:date]; 
    NSInteger weekday = [weekdayComponents weekday] - 1; 
    NSLog(@"%d", weekday); 
} 

は同じ番号を返しますが、なぜでしょうか?

答えて

8

表示される動作は正しいです。曜日コンポーネントはfirstWeekdayプロパティの影響を受けません。日曜日を表す日付があれば、それはいつも日曜日になります。あなたはその日曜日または月曜日に週を始めるでしょう。これが影響するのは、日付コンポーネントのweekプロパティの週番号です。

+0

firstWeekdayが何を指していても、日曜日は常に平日0になるでしょうか? –

+5

日曜日は常に1 – Sven

+3

日曜日1、月曜日2、火曜日3、水曜日4、金曜日5、土曜日6 –

3

日付コンポーネントを抽出するのではなく、ordinalityOfUnit:inUnit:forDate:メソッドを使用する必要があると思います。したがって、このような何か:

NSUInteger weekday = [[NSCalendar currentCalendar] ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:date]; 

基本的には、その呼び出しは、指定した日付のために(NSWeekCalendarUnit)週に(NSWeekdayCalendarUnit)その日のために求めています。

これが機能しない場合は、currentCalendarの最初の週の日を変更するのではなく、独自のカレンダーを作成する必要があります。例えば

NSCalendarIdentifier calendarIdentifier = [[NSCalendar currentCalendar] calendarIdentifier]; 
NSCalendar *calendar = [[[NSCalendar alloc] initWithCalendarIdentifier:calendarIdentifier] autorelease]; 
[calendar setFirstWeekday:2]; 

次にordinalityOfUnit:inUnit:forDate:呼び出しで、新しいcalendarオブジェクトではなく、[NSCalendar currentCalendar]を使用しています。

+0

NSWeekCalendarUnitは廃止されました:/ –

+0

もう1つの週単位の1つ、「NSWeekOfMonthCalendarUnit」または「NSWeekOfYearCalendarUnit」を試してみてください。この文脈では実際には意味をなさないが、試してみる価値がある。 –

+1

iOS 10のsetFirstWeekday:2は何も変更しません... – Dmitry

関連する問題