2013-03-19 48 views
1

我试图检测时间格式是12小时/ 24小时格式。基于这一点,我正在设置日历。
我用下面的代码在viewDidLoad方法中检测设备上的24小时格式。如何检测ipad sdk中的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小时格式,我无法设置时间。

你能告诉我哪里需要改变。

回答

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 guidej装置

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

编辑

这将首先从设备的currentLocale得到formatString的,然后它会检查,如果“A”是存在,那么它是12小时格式,如果没有的话就为24小时格式。

+1

这太神秘了。关心一个解释? – 2013-03-19 06:17:56

-2

如果你想一个12小时制时钟,然后设置的currentdate如下:

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

如果你想一个24小时制时钟,然后设置的currentdate如下:

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

问题是关于检测格式而不是如何设置格式 – 2016-04-19 11:53:47

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; 
} 
相关问题