次の日付「Sun Jul 17 07:48:34 +0000 2011」を次の形式「2011-07-17 07:48:34」に変換するにはどうすればよいですか?
以下に示すようにNSDateFormatter
を使用しましたが、機能しませんでした。結果としてnullを返します。
NSDateFormatter *objDateFormatter = [[NSDateFormatter alloc] init];
[objDateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
[objDateFormatter dateFromString:sDate];
渡す日付のスタイルに対して日付形式が間違っています。さまざまな修飾子を説明するドキュメントを次に示します。 日付形式パターン
日付「Sun Jul 17 07:48:34 +0000 2011」を解析するには、次のような形式が必要です。
[dateFormat setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
「2011-07-17 07:48:34」という形式に変換するための完全なコードは次のとおりです。
NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setDateFormat:@"EEE MMM dd HH:mm:ss ZZZ yyyy"];
NSDate *date = [dateFormatter dateFromString:sDate];
// Convert to new Date Format
[dateFormatter setDateFormat:@"yyyy-MM-dd HH:mm:ss"];
NSString *newDate = [dateFormatter stringFromDate:date];
SDateが「Sun Jul 17 07:48:34 +0000 2011」という形式の文字列である場合、NSDateに変換する必要があります。次に、2つ目のNSDateFormatterを使用して、この日付を目的の形式「yyyy-MM-dd HH:mm:ss」に変換できます。
変換に必要な文字列を把握する必要がある場合、このサイトには素晴らしいリファレンスがあります: http://unicode.org/reports/tr35/tr35-6.html#Date_Format_Patterns
例えば「Sun Jul 17 07:48:34 +0000 2011」は次のように解析できます
[dateFormatter setDateFormat:@"EEE MMM d HH:mm:ss ZZZ yyyy"];
ちょっとしたアドバイスとして、「Jul」(7月になるはず)などの非標準の日付が問題になる場合があります。 strftime()を使用して、単純なCで必要な部分を変換する方が高速です。リファレンスを参照してください: http://publib.boulder.ibm.com/infocenter/iadthelp/v7r0/index.jsp?topic=/com.ibm.etools.iseries.langref.doc/rzan5mst263.htm =
次に、UnixタイムスタンプをNSDateに変換して戻します。
[NSDate dateWithTimeIntervalSince1970:]
日付/時刻の解析にCを使用すると、通常最大10倍高速になります。 NSDateFormatterは遅い犬です。