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);