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 16 更新版本时,我们听到了困扰 Apple...
欧版/美版 特别说一下,美版选错了 可能会永久丧失4G,不过只...
一般在接外包的时候, 通常第三方需要安装你的app进行测...
前言为了让更多的人永远记住12月13日,各大厂都在这一天将应...