編集:あなたの質問を読み直すと、他のことは別として、概念的な誤解があると思います:
次の形式に準拠した値を含む NSDate オブジェクトがほとんどありません
私の知る限り (確かに、私は Objective-C プログラマーではありません)、NSDate
オブジェクトはフォーマットについて何も知りません。それはただの瞬間を表しています。テキストから解析されたのか、他の方法で作成されたのかは認識されません。
int
変数はint
10 進数でも 16 進数でもなく、単なる数値です。それを指定するのは、フォーマットと解析のときです。同様に、 を使用して、解析およびフォーマットの時点でNSDateFormatter
必要なフォーマットを記述します。
現在、1 つ NSDateFormatter
しかありません。フォーマットを"yyyy-MM-dd'T'HH:mm:ss.SSS"
に設定してから、 を呼び出す前にリセットdateFromString
しています。指定したコード スニペットはmodelObj.createdDate
ISO-8601 形式にフォーマットされますが、「MMM dd, yyyy HH:mm」形式を使用して解析しようとします。
NSDateFormatter
2 つの個別のオブジェクトを用意することをお勧めします。
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
(この場合、数値などにも同じことが当てはまります)、そのデータ型をできるだけ多くのコードに使用し、最後の瞬間にのみテキストに変換します。