当runDate值为@“星期五,2013年11月1日08:47:33格林尼治时间-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];我在actualRunDate 7模拟器上得到了一个0的iOS,但在iOS 6.1上没有
如何让它在iOS 7上工作?
发布于 2013-11-01 15:41:18
啊,我想我知道发生了什么。
根据文档,您可以为日期指定三个'ZZZ‘字符,格式如下:
Fri, 01 Nov 2013 08:47:33 -0500您可以为日期指定4个'ZZZZ‘字符,格式如下:
Fri, 01 Nov 2013 08:47:33 GMT-05:00注意在格林尼治时间和分钟之间的冒号字符!
因此,我认为解决方案(如果无法更改所获得的日期格式)是按以下方式设置格式化程序:
formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'ZZZ";。。这将跳过“GMT”部分,将其视为“ZZZ”格式的日期。
正如@rmaddy在评论中指出的那样,这个解决方案假设所有的日期在时区都有'GMT‘这个字母。如果它们是相对于其他时区表示的,那么您必须修改提供日期的格式,或者首先手动解析字符串(用正则表达式或其他什么方式提取这些字符),如果您不能这样做的话。
理想的解决方案是修复提供给客户端的日期格式,但是,根据契约优先开发的原则,我们应该尽可能宽容(假设您需要解析的日期是从具有许多下游订阅者的远程服务中使用的,如果格式被更正,所有这些都可能必须更改)。
发布于 2013-11-01 15:30:41
如果将GMT从字符串中删除,则尝试解析并使其看起来如下所示
@"Fri, 01 Nov 2013 08:47:33 -0500"返回的日期将是正确的。其他一切似乎都很好。
https://stackoverflow.com/questions/19729676
复制相似问题