[iOS][Mac] ISO 8601 相当の日付文字列を NSDateFormatter で変換する

2011年3月11日金曜日 | Published in | 0 コメント

このエントリーをはてなブックマークに追加

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

人気の投稿(過去 30日間)