web-dev-qa-db-ja.com

目的Cの日付形式の変換

次の日付「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];
30
farajnew

渡す日付のスタイルに対して日付形式が間違っています。さまざまな修飾子を説明するドキュメントを次に示します。 日付形式パターン

日付「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]; 
68
Suhail Patel

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は遅い犬です。

2
steipete