NSDateFormatterがISO 8601形式の日付を解析できない理由

Possible Duplicate:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?

私はバックエンドとしてレールを使用します。デフォルトの出力は2008-12-29T00:27:42-08:00です。

しかし、私の研究の後、NSDateFormatterはそれをサポートできませんが、2008-12-29T00:27:42-0800に日付を変更します

ISO 8601の日付を解析するために使用したコードはここにありますが、動作しません

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"];
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]);

何か案は?

16
あなたはこれに対する解決策を見つけましたか?私は "2008年12月29日:27:42 - 08:00"としてフォーマットされた日付のNSDateまたはNSStringを提供できるソリューションを探しています。受け入れられた答えは私のために働いていません。問題のある部分はタイムゾーン、すなわち「-08:00」である。
追加された 著者 Mustafa,
@ライアンそれは、このリンクを知っている、私はちょうど良いソリューションを取得したい。
追加された 著者 allenwei,

1 答え

問題は終わりのタイムゾーンにあります。

GMT-0X:00または-0X00として指定する必要があります(時間と分の間に区切りはありません)。

次の2つの組み合わせが機能します。

コンボ1 - GMT形式(GMT-0X:00)とZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]);

コンボ2 - RFC 822フォーマット(-0X00)とZZZを使用

dateFormatter = [[[NSDateFormatter alloc] init] autorelease];
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"];
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]);
48
追加された
私の場合は、「2015-05-07T16:16:47.054403Z」のようなものがありました。「yyyy」 - 'MM' - 'dd'T'HH': 'mm': 'ss。 SSSZ "
追加された 著者 diegomen,
let date = "2008-12-29T00:27:42-0800" let formatter = NSDateFormatter()formatter.setLocalizedDateFormatFromTemplate( "yyyy-MM-dd'T'H‌ H :mm:ssZZZ ")let final = formatter.dateFromString(date) code
追加された 著者 fatihyildizhan,
w3.org/TR/NOTE-datetime による2008-12-29T00:27 :42-08:00は有効な日付形式です。私はRailsのバックエンドからデフォルトのフォーマットを変更できますが、それは良い解決策ではないと思います。
追加された 著者 allenwei,
これは、2008-12-29T00:27:42Zと一緒に使用するとnilを返します。これはISO8601の en.wikipediaでもあります。組織/ wiki/ISO_8601
追加された 著者 AmineG,
2番目の解決策を試しましたが、タイムゾーンに間違いがあります: "日付形式:2008-12-29 08:27:42 +0000"。 "-0800"は "+0000"になりました
追加された 著者 JastinBall,
iso 8601形式の日付をデコードするには、日付形式を「yyyy-MM-dd'T'HH:mm:ss.SSSZ」に設定するだけです。大きな「S」はミリ秒
追加された 著者 Julio Garcia,