首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NSDateFormatter在iOS 7上返回零

为什么NSDateFormatter在iOS 7上返回零
EN

Stack Overflow用户
提问于 2013-11-01 15:18:15
回答 2查看 675关注 0票数 1

当runDate值为@“星期五,2013年11月1日08:47:33格林尼治时间-0500”时,我在iOS 7 iPhone模拟器上获得零,但在iOS 6 iPhone模拟器上没有问题。

代码语言:javascript
复制
        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上工作?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-11-01 15:41:18

啊,我想我知道发生了什么。

根据文档,您可以为日期指定三个'ZZZ‘字符,格式如下:

代码语言:javascript
复制
Fri, 01 Nov 2013 08:47:33 -0500

您可以为日期指定4个'ZZZZ‘字符,格式如下:

代码语言:javascript
复制
Fri, 01 Nov 2013 08:47:33 GMT-05:00

注意在格林尼治时间和分钟之间的冒号字符!

因此,我认为解决方案(如果无法更改所获得的日期格式)是按以下方式设置格式化程序:

代码语言:javascript
复制
formatter.dateFormat = @"EEE, dd MMM yyyy HH:mm:ss 'GMT'ZZZ";

。。这将跳过“GMT”部分,将其视为“ZZZ”格式的日期。

正如@rmaddy在评论中指出的那样,这个解决方案假设所有的日期在时区都有'GMT‘这个字母。如果它们是相对于其他时区表示的,那么您必须修改提供日期的格式,或者首先手动解析字符串(用正则表达式或其他什么方式提取这些字符),如果您不能这样做的话。

理想的解决方案是修复提供给客户端的日期格式,但是,根据契约优先开发的原则,我们应该尽可能宽容(假设您需要解析的日期是从具有许多下游订阅者的远程服务中使用的,如果格式被更正,所有这些都可能必须更改)。

票数 3
EN

Stack Overflow用户

发布于 2013-11-01 15:30:41

如果将GMT从字符串中删除,则尝试解析并使其看起来如下所示

代码语言:javascript
复制
@"Fri, 01 Nov 2013 08:47:33 -0500"

返回的日期将是正确的。其他一切似乎都很好。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19729676

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档