NSDateFormatter" HH"在iOS 8设备上返回上午/下午

时间:2015-03-31 16:53:58

标签: ios objective-c date nsdateformatter

我现在很难过。我一直很高兴地使用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];

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

我错过了什么?

1 个答案:

答案 0 :(得分:17)

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

dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];

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