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小时的区域,那么设置中的滑块会影响代码的工作原理.

转载注明原文:NSDateFormatter“HH”在iOS 8设备上返回am/pm - 代码日志