2010-09-22 59 views
6

我正在使用NSDateFormatter將格式NSDate的格式設置爲「MM:MMYYYY」格式爲「HH:mm」。NSDateFormatter當iPhone設置爲12小時制

這是我寫的代碼:

[dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
[dateFormatter setLocale:[NSLocale currentLocale]]; 

然後我更新標籤「從12:45數據於2010年9月22日」顯示,使用方法stringFromDate。

NSString *timeAndDateUpdated = [[NSString alloc] initWithFormat:@"Data from %@.", [dateFormatter stringFromDate:date]] 

如果在iPhone上的時間爲24小時的標籤正確更新,但如果它被設置爲12小時,標籤顯示「數據從(空)」。

有誰知道如何解決這個問題?

謝謝。

+0

我認爲我的答案可能應該是對此接受的答案。如果您同意,您可以更改OP嗎? – 2016-05-17 09:53:14

回答

6

如果日期完全呈現給用戶(「在」表明它是),我不會強制日期格式。它更友好的使用長/中/短日期和時間樣式,根據用戶的區域格式,它們的行爲:

[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
[dateFormatter setTimeStyle:NSDateFormatterNoStyle]; 

[timeFormatter setDateStyle:NSDateFormatterNoStyle]; 
[timeFormatter setTimeStyle:NSDateFormatterMediumStyle]; 

NSString * timeAndDate = [NSString stringWithFormat:"%@ on %@", 
    [timeFormatter stringFromDate:date], 
    [dateFormatter stringFromDate:date]]; 

還要注意,在配置NSDateFormatter是令人難以置信的昂貴(約10毫秒IIRC) 。如果你只顯示一次而不是經常更新,這很好,但是如果每個表格單元格有一個日期,它會使滾動速度變慢。我最近通過緩存日期格式化工具使繪圖速度提高了50倍......

+0

謝謝。我認爲可以強制使用數據格式,因爲該應用只會在英國上市。最好使用你的方法嗎? 此外,日期在屏幕上顯示一次,不會經常更改。 – 2010-09-23 19:25:23

+0

用戶仍然可以配置日期格式(例如12-與24-小時);尊重用戶的願望通常是一個好主意。 – 2010-09-24 16:43:19

0

我在3.1.2和4.1上運行了12和24小時設置的代碼,它工作正常。

NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
    [dateFormatter setLocale:[NSLocale currentLocale]]; 

    NSString *timeAndDateUpdated = [NSString stringWithFormat:@"Data from %@.", [dateFormatter stringFromDate:[NSDate date]]]; 

    NSLog(@"%@", timeAndDateUpdated); 

如果此代碼不適用於您,請檢查NSDateformatter或NSDate的自定義擴展/類別。

14

我剛剛也遇到了這個問題。

看來日期是由NSDateFormatter根據語言環境解析的,即使您明確指定了日期格式字符串!

因此,在這種情況下,24小時制HH被忽略,它試圖使用設備上設置的12小時時鐘進行解析。

修復它的方法是顯式重寫NSDateFormatter的語言環境;在這個例子中,將它設置爲en_US_POSIX將強制在解析小時時使用24小時時鐘,即

[dateFormatter setDateFormat:@"HH:mm 'on' dd MMMM YYYY"]; 
[dateFormatter setLocale:[[[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"] autorelease]]; 
+0

感謝您更新stackoverflow內森,並歡迎,upvoted。 – 2012-05-07 23:22:49

相關問題