检测iPhone是否在12小时或24小时模式下显示时间?

时间:2009-12-28 23:30:02

标签: iphone localization regional

如何检测iPhone是否在12小时或24小时模式下显示时间?

我目前正在监控当前区域的更改,但这并不是影响时间显示方式的唯一设置。日期和时间的24小时切换时间设置会覆盖当前的区域设置。

有没有办法检测这个12/14小时的设置?

2 个答案:

答案 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"];

在您的应用退出时运行该应用,然后在应用启动时再次执行此操作,并根据默认值中存储的值进行检查。