2

NSDateFormatter の日付形式を設定する方法がわからないだけなので、[formatter dateWithString:] は nil を返しません。

日付は次のようになります。

2008-08-18T14:32:22.1875000+01:00

私は試した

formatter setDateFormat:@"yyyy-MM-ddTHH:mm:ss.fffffffzz+GMT"];

うまくいかないようです:(。提案があれば、助けてください。

答えてくれてありがとう、私の質問で人々を少し誤解させているように見えるので、言い換えてみます。申し訳ありませんが、プログラミングには少し遅れているかもしれません。日付ラッパー オブジェクトが必要なので、日付を含む文字列を自分で解析する必要はありません。基本的に、解析する必要があるデータベースから文字列を取得して、UI で使用できるようにします。

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

それは nil を出力します

私が欲しいのは NSString->NSDat です。それで、何月が含まれているか、または何時が含まれているかを尋ねることができます。NSDate にはそのようなメソッドがないことがわかりました。それを仮定するのはばかげたことでした。何かアイデアはありますか?

4

2 に答える 2

8

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

于 2012-06-22T23:43:45.077 に答える
1

私が得ることができる最も近いものは、最後の近くのゾーンオフセットにコロンを残すだけです:

[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSSSSSZ"];

次のようになります: 2012-06-22T16:40:46.6290000-0700

私が使用していたドキュメントはここにあります。Appleからリンクされています

于 2012-06-22T23:43:58.180 に答える