如何在ipad sdk中检测24小时时间格式

时间:2013-03-19 06:12:29

标签: iphone objective-c xcode nsdate nsdateformatter

我正在尝试检测时间格式为12小时/ 24小时格式。基于此我在日历中设定时间 我使用以下代码在viewDidLoad方法中检测设备上的24小时格式。

NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
[formatter setLocale:[NSLocale currentLocale]];
[formatter setDateStyle:NSDateFormatterNoStyle];
[formatter setTimeStyle:NSDateFormatterShortStyle];
NSString *dateString = [formatter stringFromDate:[NSDate date]];
NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

之后我检查如下

if (is24h == TRUE) {
} else {
}

但我总是得到is24h值是假的。如果设备设置为12小时格式,我可以在日历中设置时间。但如果它是24小时格式,我就无法设定时间。

请告诉我需要改变的地方。

3 个答案:

答案 0 :(得分:9)

使用此方法确定时间格式

- (BOOL)timeIs12HourFormat {
    NSString *formatStringForHours = [NSDateFormatter dateFormatFromTemplate:@"j" options:0 locale:[NSLocale currentLocale]];
    NSRange containsA = [formatStringForHours rangeOfString:@"a"];
    BOOL hasAMPM = containsA.location != NSNotFound;
    return hasAMPM;
}

根据unicode date format guide j表示

  

这是一个特殊用途的符号。它不得出现在模式或骨架数据中。相反,它保留用于传递给执行灵活日期模式生成的API的骨架。在这样的上下文中,它请求区域设置(h,H,K或k)的首选小时格式,这由h,H,K或k是否以区域设置的标准短时间格式使用来确定。在这种API的实现中,在开始与availableFormats数据匹配之前,'j'必须被h,H,K或k替换。请注意,在传递给API的骨架中使用'j'是让骨架请求区域设置的首选时间周期类型(12小时或24小时)的唯一方法。

修改

这将首先从设备的currentLocale获取formatString然后它将检查“a”是否存在然后它是12小时格式,如果不是那么它是24小时格式。

答案 1 :(得分:1)

嗨,现在我的代码工作正常。我编写了如下代码。

-(BOOL)timeIs24HourFormat{

    NSDateFormatter *formatter = [[NSDateFormatter alloc] init];
    [formatter setLocale:[NSLocale currentLocale]];
    [formatter setDateStyle:NSDateFormatterNoStyle];
    [formatter setTimeStyle:NSDateFormatterShortStyle];
    NSString *dateString = [formatter stringFromDate:[NSDate date]];
    NSRange amRange = [dateString rangeOfString:[formatter AMSymbol]];
    NSRange pmRange = [dateString rangeOfString:[formatter PMSymbol]];
    is24h = (amRange.location == NSNotFound && pmRange.location == NSNotFound);

    return is24h;
}

答案 2 :(得分:-2)

如果您需要12小时制,请按以下步骤设置当前日期:

[currentDate setDateFormat:@"yyyy-MM-dd h:mm:ss a"];

如果您需要24小时制,请按以下步骤设置当前日期:

[currentDate setDateFormat:@"yyyy-MM-dd HH:mm"];