曜日の取得でハマる

2012/01/26

NSDate は NSDateFormmatter で日付表示できますが、各要素を直接取得する事はできません。 そこで、NSDateComponents を使って曜日などを取得するわけですが、ここでハマりました。

NSDateComponents: components: fromDate の第1引数です。 これをネットから安易にコピって使っていたら変な挙動が。。。

    NSDate *now = [NSDate date];
    NSDateComponents *dateComps = [calendar components:
                                   NSYearCalendarUnit   | 
                                   NSMonthCalendarUnit  |
                                   NSDayCalendarUnit    | 
                                   NSHourCalendarUnit   |
                                   NSMinuteCalendarUnit | 
                                   NSSecondCalendarUnit
                                              fromDate:now];
        NSInteger year = dateComps.year;
        NSInteger month = dateComps.month;
        NSInteger day = dateComps.day;
        NSInteger weekday = dateComps.weekday;

この例だと、year,month,day は正常な値が返ってきますが、weekday がオーバーフロー(?)な値が返ってきます。 よく見ると、

「NSWeekdayCalendarUnit」が抜けている。。。

    NSDate *now = [NSDate date];
    NSDateComponents *dateComps = [calendar components:
                                   NSYearCalendarUnit   | 
                                   NSMonthCalendarUnit  |
                                   NSDayCalendarUnit    | 
                                   NSHourCalendarUnit   |
                                   NSMinuteCalendarUnit | 
                                   NSSecondCalendarUnit |
                                   NSWeekdayCalendarUnit
                                              fromDate:now];
        NSInteger year = dateComps.year;
        NSInteger month = dateComps.month;
        NSInteger day = dateComps.day;
        NSInteger weekday = dateComps.weekday;

こういうシンプルな例なら気づきやすいですが、今回色々日付処理をかましていたので他に原因があるのではないか?とあらぬ方向を彷徨っていました。 まぁ、ちゃんと理解していればすぐ気づくのでしょうが、コピペは怖い!