好的,感谢您的评论。我最终要做的是访问http://waracle.net/iphone-nsdateformatter-date-formatting-table/并非常仔细地研究所有 NSDateFormatter 选项。特别是 RSS 帖子末尾的时区 +0000 搞砸了我的格式转换。 RSS 日期与 RFC 822 匹配,这意味着您需要在末尾使用三个 Z 才能正确捕获它。
我正在尝试像 +ZZZZ 这样在弦上失败的东西。这就是我之前修剪琴弦的原因。最终起作用的是:
@“2013 年 7 月 17 日星期三 03:23:18 +0000”
需要格式化程序:
@"EEE,dd MMM yyyy HH:mm:ss ZZZ"
在为这种情况正确设置 DateFormatter 后,我很容易就能找出其他格式的其他格式。事实证明,项目中只使用了 3 种不同的日期格式,我可以轻松地将正确的日期格式字符串存储在每个数据源旁边,并在需要时将其插入日期格式化程序。不再需要字符串搜索,所有数据都干净地转换为正确的 NSDate。
所以答案是,制作一个转换各种日期格式的示例项目,插入您需要的格式并正确使用 DateFormatter 代码。您的日期问题可能没有您想象的那么糟糕,更好地理解它们可以带来更简洁的代码。
使用下面的示例,如果格式字符串不正确,您将看到 (null)。
#import <Foundation/Foundation.h>
int main(int argc, const char * argv[])
{
@autoreleasepool {
NSArray *dateStrings = @[
// From data source 1.
@[@"2012-04-18",@"yyyy-MM-dd"],
// From data source 2.
@[@"2012-04-19 18:29:35",@"yyyy-MM-dd HH:mm:ss"],
@[@"2011-05-04 11:10:50",@"yyyy-MM-dd HH:mm:ss"],
// From RSS feeds (pubDate)
@[@"Wed, 17 Jul 2013 02:24:23 +0000",@"EEE, dd MMM yyyy HH:mm:ss ZZZ"],
@[@"Tue, 25 Jun 2013 15:04:49 +0000",@"EEE, dd MMM yyyy HH:mm:ss ZZZ"]
];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
for(NSArray *datePair in dateStrings){
[formatter setDateFormat:datePair[1]];
NSDate *thisDate = [formatter dateFromString:datePair[0]];
[formatter setDateStyle:NSDateFormatterMediumStyle];
NSLog(@"%@ = %@",datePair[0],[formatter stringFromDate:thisDate]);
}
}
return 0;
}