Unicode ドキュメントによると、fはありません。サブ秒が必要だと仮定すると、それはSである必要があります。文字どおりに転送する場合は、 Tを引用符で囲む必要もあります。zについても混乱していると思います。おそらくzz+GMTではなくZZZZが必要です。そう:
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]);
QA1480に従ってen_US_POSIX
、ストレージ用の技術文字列を生成する場合は、ロケールを明示的に設定することもできます。それ以外の場合は、現在のロケールごとに、文字列を表示することを想定して、要求されたフィールドを調整する権利を留保します。つまり、次のようになります。
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
formatter.locale = [[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
NSLog(@"%@", [formatter stringFromDate:[NSDate date]]);
ctraheyの答えによると、それはあなたが望むフォーマットを完全には得られず、例えば
012-06-22T16:44:32.9310000GMT-07:00
つまり、「GMT」という文字がそこに忍び込んでいます。単一の Z に切り替えると、GMT への明示的な参照が削除されますが、コロンも削除されます。
編集:サンプルコードごと:
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZZZZ";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSDate *date = [formatter dateFromString:@"2008-08-18T14:32:22.1875000+01:00"];
NSLog(@"%@", date);
入力文字列が指定された日付形式と一致しないため、これは失敗します — +01:00 の前に文字 GMT がありません。データベースにあるものと完全に一致する Unicode 日付文字列はないように思われるため、おそらく最も簡単な方法はコロンを削除することです。例えば
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
formatter.dateFormat = @"yyyy-MM-dd'T'HHmmss.SSSSSSSZ";
formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
NSString *sourceString = @"2008-08-18T14:32:22.1875000+01:00";
NSDate *date = [formatter dateFromString:[sourceString stringByReplacingOccurrencesOfString:@":" withString:@""]];
NSLog(@"%@", date);
私にとっては、それが出力されます2008-08-18 13:32:22 +0000
。