我现在很困惑。我一直很高兴地使用 NSDateFormatter,没有出现任何问题,但今天我注意到我的一个应用程序在运行 iOS 8.1.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 string From Date:datetime] 我会得到“4 pm”!
我缺少什么?
编辑:
要查看问题,请在手机设置中选择默认为 24 小时制的区域,例如“英国”或“法国”。然后,从设置中禁用“24 小时时间”。现在,如果您创建 NSDateFormatter 而不设置其区域设置,“HH”将不起作用。
要避免此问题,请设置区域设置(甚至与当时手机所在的区域设置相同),例如对于上面的代码我们可以添加:
dateFormatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
任何语言环境都可以使用,甚至 en_GB。这显然是一个错误,而不是 unicode 标准的某种奇怪表示,因为如果您设置了默认为 12 小时时间的区域,则“24 小时时间”滑块不会影响“HH”的工作方式,而如果如果您所在的区域默认为 24 小时制,那么设置中的滑块将影响您的代码的工作方式。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)