2009-08-28 61 views
12

我正在使用NSDateFormatter在我的iPhone應用程序中設置我的日期,並且日期顯示正常。然而,我發現所有的語言環境(我的應用程序支持多達12種不同的語言)都堅持我通過setDateFormat指定的日期格式。理想情況下,我希望日期格式以用戶的區域設置自然的形式出現,而不是遵循我的格式(對於英語非常適用,但對其他語言環境可能不太自然)。如何使NSDateFormatter顯示區域特定的日期?

以下是我的代碼:

 
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init]; 
    [dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 
    [dateFormatter setTimeStyle:NSDateFormatterShortStyle]; 
    [dateFormatter setDateFormat:@"MMMM dd, yyyy kk:mm:ss"]; 

    self.creationDate.text = [dateFormatter stringFromDate:creationTimeStamp]; 

回答

11

找到了解決方案。關鍵是根本不要撥打setDateFormat,iPhone中的API會根據setDateStylesetTimeStyle中指定的內容自動選擇合適的內容進行顯示。與@ fbrereto的設計

+0

該解決方案比使用-localizedStringFromDate API更好,因爲由-localizedStringFromDate返回的字符串將反映時區因素,有時對於某些區域來說日期/時間將不相關。要刪除時區組件,我們需要另外做到這一點:[dateFormatter setTimeZone:[NSTimeZone timeZoneForSecondsFromGMT:0]]; – 2015-01-13 06:38:15

31

我會嘗試以下NSDateFormatter API,而不是:

+ (NSString *)localizedStringFromDate:(NSDate *)date 
       dateStyle:(NSDateFormatterStyle)dateStyle 
       timeStyle:(NSDateFormatterStyle)timeStyle; 

像這樣:

self.creationDate.text = [NSDateFormatter localizedStringFromDate:creationTimeStamp 
              dateStyle:NSDateFormatterMediumStyle 
              timeStyle:NSDateFormatterShortStyle]; 

這應該給你輸出你」重新查找,稍微整理一下代碼,並讓您不必管理一些虛假的內存。

+0

但是,如果我不希望給定的風格樣式它是什麼。相反,我想用阿拉伯語和英語顯示日期,如:MMM YYYY。你能幫忙嗎? – 2016-04-01 12:15:11

0

獨立的解決方案:

static NSString *FormatDate(NSDate *date) 
{ 
    return [NSDateFormatter localizedStringFromDate:date 
             dateStyle:NSDateFormatterMediumStyle 
             timeStyle:NSDateFormatterNoStyle]; 
} 

現在,你可以簡單地運行:

NSString *formattedDate = FormatDate([NSDate new]); 
+0

NSDateFormatter創建起來相當昂貴(請參閱Bekkis post:http://www.tinymission.com/post/nsdateformatter_is_expensive)。 所以你應該只在被調用了幾次的時候才使用這個自包含的解決方案。 也許使用的NSDateFormatter應該在一個靜態變量中被延遲分配。 – LaborEtArs 2016-01-19 06:17:58

+0

好處是,您也可以將_dateFormatter傳遞給上面的static-c函數,並從消費者處繼續引用它。 – Zorayr 2016-01-26 22:46:18

相關問題