Unicode日付フォーマットパターンガイド(ここ)には、フォーマットに「a」を追加するとピリオド(たとえば、AMまたはPM)が取得されると記載されています。
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss a"];
ただし、期間情報が表示されないようにしたいのですが、そのためのフォーマット文字列が見つかりません。私が使用しているフォーマット文字列は次のとおりです。
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
残念ながら、stringFromDateを使用すると、次のようになります。
2013-01-09T11:11:00 AM
カレンダーなどによって期間の構文が異なる可能性があるため、結果の文字列からAMまたはPMを単純に削除したくはありません。期間情報の表示を停止したいだけです。
---- 8 <------
次のコードを検討してください
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];
NSString *stringDate = [formatter stringFromDate:[NSDate date]];
self.labelOutput.text = stringDate;
[formatter release];
このコードは、必要な形式の文字列を生成しますが、メモリ管理上の理由から使用できません。私が取り組んでいるアプリは、NSDateFormatterのメモリリークに悩まされています。そのため、シングルトンクラスを使用して、リリースされないセット数のNSDateFormattersをアプリに提供します。したがって、リークされるメモリの量を最小限に抑えます。残念ながら、これらの静的NSDateFormatterは、日付形式の文字列を適用した場合でも、AM/PMを追加しています。
NSDateFormatter *formatter = [MyDateFormatter dateFormat:kFormatDateMediumStyleTimeShortStyle];
[formatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]];
[formatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss"];