NSDateFormatterのdateFromStringをiOS4で使う
iOS3.xとiOS4.xでは、NSDateFormatterのdateFromStringの挙動が変わったようで、
iOS4以前をベースにしたiPhoneアプリ開発の記事を実際に確認しようとしても、
正常に変換されないことがありました。
ネットで調べたところ「2010-09-23T12:34:56+09:00」など
「+09:00」形式の場合は「+0900」に変えると上手くいくようです。
かなりハマったのでメモ。
NSDateFormatter *dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; [dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"ja_JP"] autorelease]]; NSMutableString *mstr = [[NSMutableString alloc] initWithString:@"2010-01-02T12:34:56+09:00"]; //指定した文字列の範囲のNSRangeを生成 NSRange range = [mstr rangeOfString:@"+09:00"]; //「+09:00」を「+0900」に変換 [mstr replaceCharactersInRange:range withString:@"+0900"]; //NSDate生成用の形式を設定 [dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:sszzz"]; NSDate *date = [dateFormatter dateFromString:mstr]; //表示用の形式を設定 [dateFormatter setDateFormat:@"yyyy年MM月dd日HH時mm分"]; NSString *fstr = [[NSString alloc] initWithString:[dateFormatter stringFromDate:date]]; NSLog(fstr);