如何检测iPhone是否在12小时或24小时模式下显示时间?
我目前正在监控当前区域的更改,但这并不是影响时间显示方式的唯一设置。日期和时间的24小时切换时间设置会覆盖当前的区域设置。
有没有办法检测这个12/14小时的设置?
答案 0 :(得分:13)
我已经找到了一个很好的方法,通过我添加到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
答案 1 :(得分:1)
您使用的是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"];
在您的应用退出时运行该应用,然后在应用启动时再次执行此操作,并根据默认值中存储的值进行检查。