NSDateFormatter字符串无效

时间:2016-04-19 16:07:06

标签: objective-c nsdateformatter

状况

我正在维护的应用程序有一个罕见但反复出现的问题,将NSStrings解析为NSDates。我无法在本地复制它,但我们的日志显示它确实正在为我们的用户发生。

我在StackOverflow上发现了很多关于NSDateFormatter的问题,但似乎没有一个直接相关所以我在这里。

发生了什么

我们日志上的错误消息是“2016-04-19T17:30:00-0400” is invalid.我使用getObjectValue:forString:range:error:函数来获取错误说明。那不是唯一失败的日期;有多个。

使用的日期格式为yyyy-MM-dd'T'HH:mm:ssZZZZ

如果有帮助,该项目使用Mantle并通过NSValueTransformer进行失败的初始转换。记录错误与NSValueTransformer分开完成。

我做了什么

  • 尝试了一个后备解决方案,它试图再次将字符串解析为日期,但根据日志,后备没有任何影响
  • 尝试在单独的测试项目中解析失败的字符串......并且它们都可以正常工作
  • 尝试在单独的测试项目中弄乱时区,但似乎没有任何影响,特别是因为时区已经通过ZZZZ在日期字符串中。我通过[NSTimeZone knownTimeZoneNames]
  • 浏览了可能的时区
  • 试图弄乱NSLocale无效。我不能让它在单独的测试项目中失败。我通过[NSLocale availableLocaleIdentifiers]
  • 浏览了可能的区域设置
  • 试图弄乱NSCalendar无效。我手动使用https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSCalendar_Class/#//apple_ref/doc/constant_group/Calendar_Identifiers
  • 提供的日历
  • 试图查看它是否是一个线程问题,但找不到任何证据表明这是一个问题。鉴于如何实施回退解决方案,它不太可能是一个线程问题。

CODE

不起作用的后备代码。元素是地幔物体。 rawWhenValue是一个字符串。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
dateFormatter.dateFormat = kNSDateFormatterWhenJSONFormat; //yyyy-MM-dd'T'HH:mm:ssZZZZ
NSDate *when = [dateFormatter dateFromString:element.rawWhenValue];
element.when = when;

用于获取NSDateFormatterError的代码。

NSDate *dateFallback;
NSError *err;
NSRange range = NSMakeRange(0, element.rawWhenValue.length);
BOOL parsed = [dateFormatter getObjectValue:&dateFallback forString:element.rawWhenValue range:&range error:&err];

我的智慧结束了。即使是向上看的方向也会受到赞赏。非常感谢!

0 个答案:

没有答案