6

特定の日付の平日を計算する必要がありますが、カレンダーによっては、週が月曜日に始まり、日曜日に始まる場合があります

だから私はそれを月曜日に開始するように設定したかった

[[NSCalendar currentCalendar] setFirstWeekday:2];

ただし、計算結果は同じです

{
    [[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);
}

同じ数字を返しますが、なぜですか?

4

3 に答える 3

10

表示される動作は正しいです。曜日コンポーネントは、firstWeekday プロパティの影響を受けません。日曜日を表す日付がある場合、その日曜日または月曜日に週を開始するかどうかにかかわらず、それは常に日曜日になります。これが影響するのは、日付コンポーネントの週プロパティの週番号です。

于 2013-06-01T19:27:08.277 に答える
5

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

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

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

それがうまくいかない場合は、currentCalendar.

例えば:

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

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

于 2013-06-01T19:20:40.050 に答える