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

标签 ios objective-c date nsdateformatter

<分区>

我现在很困惑。我一直愉快地使用 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 stringFromDate:datetime],我会得到“下午 4 点”!

我错过了什么?

最佳答案

编辑: 要查看问题,请在您的手机设置中选择默认为 24​​ 小时制的区域,例如“英国”或“法国”。然后,从设置中禁用“24 小时制”。现在,如果您创建一个 NSDateFormatter 而不设置其语言环境,则“HH”将不起作用。 为避免此问题,请设置语言环境(甚至与手机当时所在的语言环境相同),例如对于上面的代码,我们可以添加:

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

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

关于ios - NSDateFormatter "HH"在 iOS 8 设备上返回上午/下午,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29374181/

相关文章:

objective-c - iOS 5 自定义注释未显示其标题

iphone - 在电话应用程序中预加载 View

Java - GAE 数据存储以特定格式保存日期

sql - 仅当从现在起 60 天内没有任何日期时才选择

javascript - 更改 JavaScript 中的日期格式

ios - 我可以在 for 循环中将键值对添加到 NSarray 或字典吗?

ios - 在两个 View Controller 之间传递mapkit数据

ios - 具有水平分页和垂直滚动的 UICollectionView

iphone - UITableViewCell accessoryType 已设置,但 accessoryView 为 nil。如何设置 accessoryView backgroundColor?

ios - 如何阻止自定义 UIStoryboardSegue 末尾的 "flashing" View ?