如何检测 iPhone 是以 12 小时还是 24 小时模式显示时间?
我目前监视当前区域的更改,但这并不是影响时间显示方式的唯一设置。日期和时间设置中的 24 小时切换会覆盖当前区域设置。
有什么方法可以检测到这个 12/14 小时设置吗?
如何检测 iPhone 是以 12 小时还是 24 小时模式显示时间?
我目前监视当前区域的更改,但这并不是影响时间显示方式的唯一设置。日期和时间设置中的 24 小时切换会覆盖当前区域设置。
有什么方法可以检测到这个 12/14 小时设置吗?
我已经找到了一种不错的方法来确定这一点,我添加了一个小功能到NSLocale
. 它似乎非常准确,并且在对多个区域进行测试时没有发现任何问题。
@implementation NSLocale (Misc)
- (BOOL)timeIs24HourFormat {
NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
BOOL is24Hour = amRange.location == NSNotFound && pmRange.location == NSNotFound;
[formatter release];
return is24Hour;
}
@end
你在使用NSDateFormatter
类吗?据我所知,这尊重用户现有的任何区域时间格式设置。
编辑-回复:您的评论:
格式字符串比较可能是正确的方法。类似于以下内容:
NSDateComponents *midnightComp = [[NSDateComponents alloc] init];
[midnightComp setHour:0]
[midnightComp setMinute:0];
NSDateFormatter *format = [[NSDateFormatter alloc] init];
[format setDateStyle:NSDateFormatterNoStyle];
[format setTimeStyle:NSDateFormatterShortStyle];
BOOL midnightIsZeros = [[[format stringFromDate:[[NSCalendar currentCalendar] dateFromComponents:midnightComp]] substringToIndex:2] isEqualToString:@"00"];
[[NSUserDefaults standardUserDefaults] setBool:midnightIsZeros forKey:@"TimeWas24Hour"];
在您的应用程序退出时运行它,然后在应用程序启动时再次执行它并根据默认值中存储的值检查它。