2017-02-10 57 views
3

我面臨與NSDateFormatter有線問題。問題與NSDateFormatter,而NSDate從字符串只有時間

以下是我的代碼:

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
[formatter setDateFormat:@"hh:mma"]; 
NSString *currentHours = [formatter stringFromDate:[NSDate date]]; 
NSLog(@"Hours: %@", currentHours); 

如果設備設置設置在12小時內顯示時間(即AM & PM)以下的輸出:

Hours: 12:40PM 

如果設備設置設置爲24小時顯示時間輸出爲:

Hours: 12:41 

這也影響我的o其他代碼。

NSDate *open = [formatter dateFromString:@"08:00am"]; 
NSDate *close = [formatter dateFromString:@"05:00"]; 

如果設備的設置設置爲顯示在24小時內的時間,然後這兩個日期對象是nil。在12小時的時鐘設置工作正常的情況下。

如果任何人有解決方案請讓我知道。

+0

在24小時格式沒有上午還是下午 –

+0

我知道。但我的日期格式是@「hh:mma」。 – OMK

+0

我想下面的答案會幫助你 –

回答

4

格式化區域設置爲:

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"]; 

但是請注意,這將迫使a英語本土化 「AM」/「PM 」。許多語言(包括我的)不使用後綴來表示「AM」/「PM」。

這是一個相當煩人的錯誤,但如果你關心本地化,你應該尊重用戶設置,不要強迫12小時和24小時。

理想情況下,你應該只設置格式的樣式,讓它使用系統設置:

dateFormatter.dateStyle = NSDateFormatterNoStyle; 
dateFormatter.timeStyle = NSDateFormatterShortStyle 
2

設置格式化的語言環境明確地en_US_POSIX

formatter.locale = [NSLocale localeWithLocaleIdentifier:@"en_US_POSIX"];