編集:あなたの質問を読み直すと、他のことは別として、概念的な誤解があると思います:
次の形式に準拠した値を含む NSDate オブジェクトがほとんどありません
私の知る限り (確かに、私は Objective-C プログラマーではありません)、NSDateオブジェクトはフォーマットについて何も知りません。それはただの瞬間を表しています。テキストから解析されたのか、他の方法で作成されたのかは認識されません。
int変数はint10 進数でも 16 進数でもなく、単なる数値です。それを指定するのは、フォーマットと解析のときです。同様に、 を使用して、解析およびフォーマットの時点でNSDateFormatter必要なフォーマットを記述します。
現在、1 つ NSDateFormatterしかありません。フォーマットを"yyyy-MM-dd'T'HH:mm:ss.SSS"に設定してから、 を呼び出す前にリセットdateFromStringしています。指定したコード スニペットはmodelObj.createdDateISO-8601 形式にフォーマットされますが、「MMM dd, yyyy HH:mm」形式を使用して解析しようとします。
NSDateFormatter2 つの個別のオブジェクトを用意することをお勧めします。
NSDateFormatter *isoFormat = [[NSDateFormatter alloc] init];
[isoFormat setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSS"];
NSString *createdDateStr = [format stringFromDate:modelObj.createdDate];
NSDateFormatter *shortFormat = [[NSDateFormatter alloc] init];
[shortFormat setDateFormat:@"MMM dd, yyyy HH:mm"];
NSDate *parsedDate = [isoFormat dateFromString:createdDateStr];
NSLog(@"========= REal Date %@",[shortFormat stringFromDate:parsedDate]);
formattedDate変数をに変更したことに注意してください。これはparsedDate、NSDateテキストを解析して作成されたものです。
コメントに記載されているように、実際にこのようにフォーマットして解析する必要がない限り、そうすべきではありません。元のコードをすべて含めて、日付をフォーマットし、同じ .xml で再解析する方法NSDateFormatterを示しました。次のようにするだけで同じ結果が得られます。
NSDateFormatter *shortFormat = [[NSDateFormatter alloc] init];
[shortFormat setDateFormat:@"MMM dd, yyyy HH:mm"];
NSLog(@"========= REal Date %@",[shortFormat stringFromDate:modelObj.createdDate]);
一般に、不要な変換は避ける必要があります。テキストからより自然なデータ型に変換しNSDate(この場合、数値などにも同じことが当てはまります)、そのデータ型をできるだけ多くのコードに使用し、最後の瞬間にのみテキストに変換します。