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

Ecu*_*dor 10 date objective-c nsdateformatter ios

我现在很难过.我一直很高兴地使用NSDateFormatter没有任何问题,但今天我注意到我的一个应用程序在iOS 6.3的iPhone 6 plus设备上给了我疯狂的结果 - 而在其他设备/模拟器上似乎没问题.调查它有这个代码:

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init];
[dateFormatter setTimeZone:[NSTimeZone timeZoneWithAbbreviation:@"UTC"]]; 
[dateFormatter setDateFormat:@"HH"];
NSInteger hour= [[dateFormatter stringFromDate:datetime] integerValue];
Run Code Online (Sandbox Code Playgroud)

这导致(在设备上)到0-12小时的表示法,因为有一个超出我的原因,如果我在那时打印[dateFormatter stringFromDate:datetime]我得到"下午4点"!

我错过了什么?

Ecu*_*dor 17

已编辑:要查看问题,请在手机设置中选择默认为24小时制的区域,例如"英国"或"法国".然后,从设置中禁用"24小时时间".现在,如果您在不设置其语言环境的情况下创建NSDateFormatter,则"HH"将不起作用.要解决此问题,请设置区域设置(即使是当时手机所在的区域设置),例如,我们可以添加上述代码:

dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
Run Code Online (Sandbox Code Playgroud)

任何语言环境都可以使用,甚至是en_GB.这显然是一个错误,而不是unicode标准的某种奇怪表示,因为如果你设置了一个默认为12小时时间的区域,那么"24小时时间"滑块不会影响"HH"的工作方式,而如果如果您位于默认为24小时的区域,则设置中的滑块将影响代码的工作方式.

  • 生命保护!谢谢! (2认同)