ISO 8601日付文字列を NSDateに変換する
例えば
2010-12-01T21:35:43+0900という文字列があった場合
NSDateFormatter* formatter = [[NSDateFormatter alloc] init]; [formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; NSDate* date = [formatter dateFromString:string]; [formatter release];で NSDate へ変換できる。
ISO 8601 には多くのバリエーションがあって上記書式は Facebook API などで使われている ISO 8601 書式の一つ。
参考:ISO 8601 - Wikipedia
これはどうか?時差が +09:00 となっている(先ほどは 0900)。
2010-12-01T21:35:43+09:00上記書式は W3C が定義している書式。
参考:日付の表記に関するノート
ISO 8601 のサブセットとして位置づけられている。
結果は×。
先ほどの setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ" では変換できない。ZZ, ZZZ, ZZZZ, z も駄目。'+09:00' には対応していない。
この場合は +09:00 から : を無くして +0900 として NSDateFormatter へ渡してやる(ベタなやり方だが)。
string = [string stringByReplacingOccurrencesOfString:@":" withString:@"" options:0 range:NSMakeRange(22, 1)];
NSDateFormatter の書式
NSDateFormatter で扱える書式は公式リファレンスには見つからず、独自に調査している人の情報が見つかった。
Stepcase » Blog Archive » Format String for the iPhone NSDateFormatter
これは参考になる。
ISO 8601 変換ライブラリ
ISO 8601 文字列から NSDate に変換するライブラリも存在する。
ISO 8601 parser and unparser
このライブラリは ISO 8601 の多くのバリエーションをサポートしているようだ。
参考情報
PHPにおける日付と時刻の混乱(1/4):CodeZine
PHPの情報だがさまざまな書式例が載っていて参考になる。
Responses
Leave a Response