状况
我正在维护的应用程序有一个罕见但反复出现的问题,将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分开完成。
我做了什么
[NSTimeZone knownTimeZoneNames]
[NSLocale availableLocaleIdentifiers]
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];
我的智慧结束了。即使是向上看的方向也会受到赞赏。非常感谢!