DC2*_*DC2 5 cocoa parsing nsdateformatter date-parsing
在处理从各种客户端发送的各种JSON数据时,日期格式标准化是一个真正的问题.
我可能会得到以下任何一项:2013-10-05
2013年7月13日星期一
2-6-13
有时会有小时,分钟和秒以及时区信息.对于每个客户端,我必须手动设置一个NSDateFormatter,或者如果无法解析它我已经完成了子串搜索.我真正想做的是将所有这些组合成一个单一的方法,并以某种方式确定我正在处理的类型.然后有一些switch语句来处理该特定日期的解析.
我无法改变他们的格式,但我怎样才能更好地处理它们?
好的,谢谢您的评论。我最终做的是访问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;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
126 次 |
| 最近记录: |