2

問題があります:setFirstWeekDay動作しません...理由がわかりません...

 NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
    [gregorianT setFirstWeekday:2];
 NSDateFormatter *formatDayWeek = [[NSDateFormatter alloc] init];
    [formatDayWeek setDateFormat:@"c EEEE"];

    NSLog(@"date : %@  value for date : %@", dateForMonth, [formatDayWeek stringFromDate:dateForMonth]);

これは私が得たものです:

date : 2012-11-23 14:18:28 +0000  value for date : 6 Friday

そして、私は得るべきですdate : 2012-11-23 14:18:28 +0000 value for date : 5 Friday

4

1 に答える 1

4

問題は、ここで実際に 3 つの個別のオブジェクトを扱っていることです: NSCalendar、NSDate、および NSDateFormatter (作成した NSCalendar オブジェクトを使用していません)。3 つが暗黙のうちに接続されているわけではありません。NSDate を日付フォーマッタに渡すと、カスタムの NSCalendar が、変更された曜日で方程式から完全に取り出されます。覚えておいてください: NSDate オブジェクトは、基準点 (2001 年 1 月 1 日午前 0 時 GMT からの秒数など) からの時間の単なる尺度です...「曜日名」、曜日の順序、 」などの時間の尺度です。

変更された順序を確認したい場合は、カレンダー オブジェクトをフォーマッタに渡します。

NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorianT setFirstWeekday:2];

NSDateFormatter *formatDayWeek = [[NSDateFormatter alloc] init];
[formatDayWeek setCalendar:gregorianT];
[formatDayWeek setDateFormat:@"c EEEE"];

NSLog(@"Value for date: %@", [formatDayWeek stringFromDate:dateForMonth]);

...または、NSCalendar オブジェクトから直接序数にアクセスできます。

NSCalendar *gregorianT = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
[gregorianT setFirstWeekday:2];

NSUInteger valueOfDay = [gregorianT ordinalityOfUnit:NSWeekdayCalendarUnit inUnit:NSWeekCalendarUnit forDate:dateForMonth];

NSLog(@"Value for date : %ld", (long)valueOfDay);
于 2012-11-23T15:39:18.013 に答える