NSDateComponents で今月1日の曜日を取得


NSDateComponents を使って今月1日の曜日を取得する簡単なプログラムではまってしまった。

まず、今日の NSDateComponents を得る。

NSDate* today = [NSDate date];// this month
NSCalendar* gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar];
NSDateComponents* components = [gregorian components:
(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:today];

ここまではいい。で、ここで得たNSDateComponentsを使って1日(ついたち)を設定すれば答えは出ると思った。つまり、

[components setDay:1];
NSIntegar weekday = [components weekday];

でもこれは間違い。

一旦、NSDate を作って、NSCalendar から再度 NSDateComponents を取得しなければならないのだ。つまり、

[components setDay:1];
NSDate* d = [gregorian dateFromComponents:components];
components = [gregorian components:
(NSDayCalendarUnit | NSMonthCalendarUnit | NSYearCalendarUnit | NSWeekdayCalendarUnit) fromDate:d];
NSIntegar weekday = [components weekday];

となる。
なお、このとき曜日だけでいいので
カレンダーに (NSDayCalendarUnit | NSWeekdayCalendarUnit)
だけ指定するという横着をすると、0001年01月の曜日が返ってきてしまう。

広告