如何检测iPhone是否以12小时或24小时模式显示时间?检测iPhone是否在12小时或24小时模式下显示时间?
我目前正在监视当前区域的变化,但这不是影响时间显示的唯一设置。在日期&时间设置中的24小时切换覆盖当前区域设置。
有什么办法可以检测到这个12/14小时的设置吗?
如何检测iPhone是否以12小时或24小时模式显示时间?检测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"];
运行,作为您的应用程序退出,然后再做一次应用程序启动时,并检查它与存储在默认值:沿着线的东西。
我基本上需要检测自上次加载后该设置是否发生了变化。我可以检测区域设置标识符,但是24小时设置没有这种设置。唯一我能想到的是比较保存的格式化日期字符串,但是时区和夏令时存在问题,可能会导致直接比较问题。 – 2009-12-28 23:34:57
感谢您的加入,但我注意到,几个地区实际上在24小时模式下显示小时数为0。 – 2009-12-29 01:24:18
在这种情况下,抓住上面的前两个字符,并检查它们是“00”还是“0:”。 – 2009-12-29 01:54:13