NSDateFormatter を使用して、iPhone で RFC 822 の日付を解析しています。ただし、日付形式でオプション要素を指定する方法はありません。RFC 822 仕様には、日付パーサーを壊しているオプションの部分がいくつかあります。何もうまくいかない場合は、おそらく仕様に従うカスタム パーサーを作成する必要があります。
たとえば、仕様では曜日名はオプションです。したがって、これらの日付は両方とも有効です。
Tue, 01 Dec 2009 08:48:25 +0000
形式EEE, dd MMM yyyy HH:mm:ss z
01 Dec 2009 08:48:25 +0000
で解析されます 形式で解析されますdd MMM yyyy HH:mm:ss z
これは私が現在使用しているものです:
+ (NSDateFormatter *)rfc822Formatter {
static NSDateFormatter *formatter = nil;
if (formatter == nil) {
formatter = [[NSDateFormatter alloc] init];
NSLocale *enUS = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"];
[formatter setLocale:enUS];
[enUS release];
[formatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss z"];
}
return formatter;
}
+ (NSDate *)dateFromRFC822:(NSString *)date {
NSDateFormatter *formatter = [NSDate rfc822Formatter];
return [formatter dateFromString:date];
}
そして、次のように日付を解析します。
self.entry.published = [NSDate dateFromRFC822:self.currentString];
1 つの方法は、両方の形式を試して、null 以外の値を返すものをすべて取得することです。ただし、仕様には 2 つのオプション部分 (曜日名と秒) があり、4 つの可能な組み合わせがあります。それでも悪くはありませんが、少しハッキーです。