首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么NSFormatter dateFromString偶尔会返回零?

为什么NSFormatter dateFromString偶尔会返回零?
EN

Stack Overflow用户
提问于 2015-04-14 23:32:31
回答 1查看 202关注 0票数 0

我有一种方法可以将特定格式的字符串转换为NSDate,但它偶尔会返回零。

代码语言:javascript
复制
- (NSDate *)dateFromString:(NSString *)dateAndTime
{
    NSDate *date;

    NSDateFormatter *formatter = [[NSDateFormatter alloc]init];
    [formatter setDateFormat:@"MM/dd/yyyy hh:mm a"];

    NSTimeZone *gmt = [NSTimeZone timeZoneWithAbbreviation:@"GMT"];
    [formatter setTimeZone:gmt];

    date = [formatter dateFromString:dateAndTime];

    return date;
}

从我所能判断的情况来看,这大部分时间都是可行的,但总有一部分时间是失败的。

我跟踪这个bug已经有一段时间了,所以当这种情况发生时,有一些代码会使应用程序崩溃。崩溃报告告诉我使方法返回为零的值。

例如,我收到了一份坠机报告,报告说“2015年4月14日下午7:35”返回为零。

当我为每个日期编写相同的值时,它会在我的计算机上以调试模式运行应用程序时工作。

这里会发生什么事?我不是为NSDate报道了一些案例吗?为什么不是每个设备都会发生这种情况?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-04-15 00:43:49

首先,4/14/2015 7:35 PM的日期字符串可能是M/d/yyyy h:m aM/dd/yyyy h:mm aPatterns

其次,建议将NSLocale设置为NSDateFormatter。

代码语言:javascript
复制
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];

当我和一个中国人一起工作时,我遇到了一个同样的问题,那就是NSDate是nil。它只发生在特定的设备上,问题是区域设置。

若要再现问题,请执行以下步骤:

  1. 转到Settings应用程序
  2. 通用->语言&区域->高级语言
  3. 自动关机
  4. 将语言转换为Chinese, Simplified
  5. 再次执行您的应用程序。如果没有设置NSDate,您会发现NSLocale总是为零。
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29639126

复制
相关文章

相似问题

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