为什么 NSFormatter dateFromString 偶尔会返回 nil?
Why is NSFormatter dateFromString occasionally returning nil?
我有一种方法可以将特定格式的字符串转换为 NSDate
,但它偶尔会 returns nil。
- (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;
}
据我所知,这在大多数情况下都有效,但也有一定比例的时间会失败。
我已经跟踪这个错误一段时间了,所以有一些代码会在发生这种情况时使应用程序崩溃。崩溃报告告诉我使方法 return nil.
的值
例如,我收到一份崩溃报告,告诉我“4/14/2015 7:35 PM”returned nil。
当我为每个日期硬编码相同的值时,当 运行 应用程序在我的计算机上处于调试模式时它会起作用。
这里可能发生了什么?我没有涵盖 NSDate
的某些案例吗?为什么它不会在所有设备上发生?
首先,4/14/2015 7:35 PM
的日期字符串可能是M/d/yyyy h:m a
或M/dd/yyyy h:mm a
。
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
其次,建议设置NSLocale为NSDateFormatter。
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
当我与一个中国人一起工作时,我遇到了同样的问题,即 NSDate 被设置 nil
。仅在特定设备上发生,问题出在区域设置上。
要重现该问题,请按照以下步骤操作:
- 转到“设置”应用
- 常规 -> 语言和地区 -> 高级
- 关闭自动
- 将语言更改为
Chinese, Simplified
- 再次执行您的应用程序。如果未设置 NSLocale,您会发现 NSDate 始终为 nil。
我有一种方法可以将特定格式的字符串转换为 NSDate
,但它偶尔会 returns nil。
- (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;
}
据我所知,这在大多数情况下都有效,但也有一定比例的时间会失败。
我已经跟踪这个错误一段时间了,所以有一些代码会在发生这种情况时使应用程序崩溃。崩溃报告告诉我使方法 return nil.
的值例如,我收到一份崩溃报告,告诉我“4/14/2015 7:35 PM”returned nil。
当我为每个日期硬编码相同的值时,当 运行 应用程序在我的计算机上处于调试模式时它会起作用。
这里可能发生了什么?我没有涵盖 NSDate
的某些案例吗?为什么它不会在所有设备上发生?
首先,4/14/2015 7:35 PM
的日期字符串可能是M/d/yyyy h:m a
或M/dd/yyyy h:mm a
。
http://www.unicode.org/reports/tr35/tr35-25.html#Date_Format_Patterns
其次,建议设置NSLocale为NSDateFormatter。
formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];
当我与一个中国人一起工作时,我遇到了同样的问题,即 NSDate 被设置 nil
。仅在特定设备上发生,问题出在区域设置上。
要重现该问题,请按照以下步骤操作:
- 转到“设置”应用
- 常规 -> 语言和地区 -> 高级
- 关闭自动
- 将语言更改为
Chinese, Simplified
- 再次执行您的应用程序。如果未设置 NSLocale,您会发现 NSDate 始终为 nil。