在处理从不同客户机发送的各种各样的JSON数据时,数据格式标准化是一个真正的问题。
我可能会得到其中的任何一个: 2013-10-05
2-6-13
2013年7月13日星期一
有时会有小时、分钟和秒以及时区信息。对于每个客户端,我必须手动设置一个NSDateFormatter,或者如果无法解析它,我会进行子字符串搜索。我真正想做的是将所有这些合并到一个方法中,并以某种方式确定我处理的是哪种类型。然后使用某种类型的switch语句来处理该特定日期的解析。
我无法更改它们的格式,但我如何才能更好地处理它们?
发布于 2013-07-26 01:09:27
好的,谢谢你的评论。我最终做的是去http://waracle.net/iphone-nsdateformatter-date-formatting-table/,非常仔细地研究所有的NSDateFormatter选项。特别是RSS帖子末尾的+0000时区把我的格式转换搞得一团糟。RSS日期与RFC822匹配,这意味着您需要在末尾使用三个Z才能正确地捕获它。
我正在尝试像+ZZZZ这样的东西,它们在字符串上失败了。这就是我之前修剪弦的原因。最终起作用的是:
@"Wed,17 Jul 2013 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;
}发布于 2013-07-20 00:50:19
这不是你问题的确切答案,但是当我想要解析日期而不确定格式时,我通常只为日期设置NSDataDetector。检测器通常会检测多种语言的日期,并一次性格式化所有日期。它相当整洁。
https://stackoverflow.com/questions/17750447
复制相似问题