NSDateFormatter“HH”在iOS 8设备上返回am / pm

前端之家收集整理的这篇文章主要介绍了NSDateFormatter“HH”在iOS 8设备上返回am / pm前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
这个问题在这里已经有一个答案:> What is the best way to deal with the NSDateFormatter locale “feechur”?4个
我现在很痛我一直很高兴地使用NSDateFormatter没有任何问题,但今天我注意到我的一个应用程序给我的iPhone 6加上iOS 8.1.3的设备疯狂的结果 – 而在其他设备/模拟器似乎是好的.看看它有这个代码
NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
[dateFormatter setDateFormat:@"HH"];
NSInteger hour= [[dateFormatter stringFromDate:datetime] integerValue];

这个结果(在设备上)为0-12小时的符号,因为超出我的原因,如果我打印[dateFormatter stringFromDate:datetime]在那一点我得到“下午4点”!

我失踪了什么

解决方法

编辑:
要查看问题,请在手机设置中选择一个默认为24小时制的区域,例如“英国”或“法国”.然后,从设置中禁用“24小时”.现在,如果您创建一个NSDateFormatter而不设置其区域设置,“HH”将不起作用.
为了规避这个问题,请设置区域设置(即使是与当时手机相同).对于上面的代码我们可以添加
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

任何地区都会工作,甚至en_GB.这显然是一个bug,而不是unicode标准的某种奇怪的表示,因为如果你设置了一个默认为12小时的区域,那么“24小时时间”滑块不会影响“HH”的工作原理,而if您处于默认为24小时的区域,那么设置中的滑块会影响代码的工作原理.

猜你在找的iOS相关文章