当runDate值为@“星期五,2013年11月1日08:47:33 GMT-0500”时,我在iOS 7 iPhone模拟器上没有,但在iOS 6 iPhone模拟器上没问题
NSString *runDate = [reportDictionary objectForKey:@"runDate"];
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]];
formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss ZZZ";
NSDate *actualRunDate = [formatter dateFromString:runDate];
我最终在iOS 7模拟器上使用了一个nil的actualRunDate但在iOS 6.1上却没有
如何让它在iOS 7上运行?
答案 0 :(得分:3)
根据文档,您可以为格式指定三个“ZZZ”字符:
Fri, 01 Nov 2013 08:47:33 -0500
您可以按以下格式为日期指定四个“ZZZZ”字符:
Fri, 01 Nov 2013 08:47:33 GMT-05:00
请注意GMT小时和分钟之间的冒号字符!
因此,我认为解决方案(如果你不能改变你得到的日期格式)是设置格式化程序如下:
formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'ZZZ";
。 。这将跳过'GMT'部分,将其视为'ZZZ'格式的日期。
正如@rmaddy的评论所指出的,这个解决方案假定所有日期在时区中都有字母'GMT'。如果它们与其他时区相关,那么你必须修改你提供的日期的格式,或者首先手动解析字符串(用正则表达式或其他东西提取这些字符),如果你根本做不到。
理想的解决方案是修复提供给客户端的日期格式,但是根据契约优先开发的原则,我们应该尽可能宽容(假设您需要这个日期)正在从具有许多下游订阅者的远程服务中消费解析,如果格式被更正,则所有这些订阅者都可能必须更改。
答案 1 :(得分:1)
如果您从正在尝试解析的字符串中删除GMT并使其看起来像这样
@"Fri, 01 Nov 2013 08:47:33 -0500"
返回的日期是正确的。其他一切似乎都很好。