【发布时间】:2010-12-23 11:26:50
【问题描述】:
我正在使用 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];
一种方法是尝试两种格式,并获取返回非空值的任何内容。但是,规范中有两个可选部分(日期名称和秒),并且有 4 种可能的组合。仍然不算太糟糕,但它有点hacky。
【问题讨论】:
标签: iphone parsing date nsdate nsdateformatter