iOS随笔小记

iOS随笔小记--- 日期格式化错误:date cannot b

2019-06-20  本文已影响1人  七一小月

一、问题描述:

开发的时候发现, 时间格式不对时解析返回null
2019-05-23 01:30:00 +0000
Thu May 23 20:40:00 2019
(以上都正常解析)

2019-05-22 10:00:00 am +0000
2019-05-23 04:30:11 pm +0000
(解析错误)
报错信息:

*** -[__NSCFCalendar rangeOfUnit:startDate:interval:forDate:]: date cannot be nil. Future exception.

原因: 时间格式导致的。
多了am/pm,因为app是国际化的,涉及到的国家区域比较多
1):以为是美国那边的客户手机越狱,重新设置了手机的时间格式,所以导致时间格式出现错误,最后验证不是手机越狱
2):对字符串2019-05-22 10:00:00 am +0000进行截取,直接拿掉am/pm,验证不可行

二:解决过程

1.思考

查找了很久,最终发现不同的时间格式,是因为手机地区的设置不一样而导致的,和APP本身的时区设置无关。像NSDateFormatter这样的类,会根据设备的设置,自动返回不同语言的数据。

正常解析时,手机系统的地区设置如下:
屏幕快照 2019-06-20 下午12.09.42.png
解析错误时,手机系统的地区设置如下:
屏幕快照 2019-06-20 下午12.08.47.png
2.解决

既然是NSDateFormatter这样的类返回数据的问题,那么直接修改它的NSLocale属性就好了

NSLocale * locale=[[NSLocale alloc]initWithLocaleIdentifier:@"en_US"];
dateFormatter.locale= locale;

这样的话,就保证了数据返回的语言一致,也就不会出现因格式不同而导致解析失败的问题了。

上一篇 下一篇

猜你喜欢

热点阅读