2013-03-19 67 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; 
} 
相關問題