我正在尝试解析RSS新闻的XML文件。首先,我尝试了http://ria.ru/export/rss2/index.xml的RSS,一切都运行得很好。然后我尝试了另一个资源,即http://interfax.ru/rss.asp,我遇到了日期问题:
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:@"EEE, d MMM yyyy HH:mm:ss Z"];
NSDate *dateFormatFromString = [dateFormat dateFromString:[item objectForKey:@"Date"]];
NSLog(@"%@", [item objectForKey:@"Date"]);
NSDateFormatter *dateFormatNew = [[NSDateFormatter alloc]init];
[dateFormatNew setDateFormat:@"h:mm a, MMM d, YYYY"];
NSString *stringTime = [dateFormatNew stringFromDate:dateFormatFromString];
NSLog(@"%@", stringTime);[item objectForKey:@"Date"]没有问题,它和RSS是一样的。例如:
Wed, 25 Jan 2012 16:41:00 +0400但是,具有相同日期格式的第二个RSS给出了NULL。stringTime和dateFormatFromString也都会生成NULL值。我更改了具有相同格式日期的地址RSS,但仍然存在此问题。
发布于 2012-01-27 07:17:17
如果您正在尝试为任何提要(而不仅仅是您拥有的特定提要)创建RSS阅读器,则需要处理各种格式错误的日期格式。尽管有规范,但许多RSS提要并不遵循这些规范。
一种方法是拥有一个日期格式数组,并对其进行枚举,直到返回一个非nil字符串:
static NSString *sGetDateForString(NSString *inString)
{
static NSArray *sPossibleDateFormats = nil;
if (!sPossibleDateFormats) sPossibleDateFormats = [[NSArray alloc] initWithObjects:
@"EEE, d MMM yyyy HH:mm:ss Z",
@"h:mm a, MMM d, YYYY",
// Add more formats here as you encounter them in the wild
nil];
NSDate *result = nil;
for (NSString *format in sPossibleDateFormats) {
NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init];
[dateFormat setDateFormat:format];
result = [dateFormat dateFromString:dateString];
[dateFormat release];
if (result) break;
}
return result;
}这会很慢,但对于你的应用程序来说可能已经足够快了。如果需要额外的性能,可以尝试缓存匹配日期格式的索引,并将其传递回sGetDateForString() (大多数RSS只使用一种日期格式)。
发布于 2012-01-27 03:05:24
如果不确切知道在这两种情况下传递给[dateFormat dateFromString:]的是什么字符串,就很难说清楚到底发生了什么。您应该发布更具体的详细信息,以帮助缩小范围。
在不了解更多的情况下,我看到这两个链接之间唯一明显的区别是它们似乎使用了不同的文本编码。如果您以相同的方式解析,而不考虑编码差异,那么这两个[item objectForKey:]提要的内容实际上可能并不相同。
https://stackoverflow.com/questions/9023033
复制相似问题