2009-07-09 43 views
12

這是一個稍微棘手的問題。我在iPhone上使用NSDateFormatter,但我只想顯示沒有年份組件的標準日期。但保留用戶區域設置格式的日期。在iPhone上使用NSDateFormatter,保護區域設置但丟失日期組件

我可以很容易地覆蓋使用

[dateFormatter setDateFormat:@"h:mma EEEE MMMM d"]; // hurl.ws/43p9 (date formatting) 

格式化但現在的日期是在我的EN-NZ格式如下午12:01週三7月7日因此,我已完全殺死了區域周邊的任何其他用戶世界。

我想說。

給我這個 用戶所在地區是正確本地化的日期,但省略了多年 組件。

由於日期顯示爲字符串,所以我很想試試日期,然後通過從字符串中刪除這個字段來刪除年份。

回答

11

你可以嘗試這樣的:一個黑客的

//create a date formatter with standard locale, then: 

// have to set a date style before dateFormat will give you a string back 
[dateFormatter setDateStyle:NSDateFormatterMediumStyle]; 

// read out the format string 
NSString *format = [dateFormatter dateFormat]; 
format = [format stringByReplacingOccurrencesOfString:@"y" withString:@""]; 
[dateFormatter setDateFormat:format]; 

類,但它應該工作。

編輯:您可能希望先刪除字符串@"y,"@" y"的出現位置,以防止最終出現一些時髦的額外空格或逗號。

+0

希望你不介意,但我還是把第一次添加的行設置一個日期樣式的自由 - 如果你不設置日期風格的日期格式返回任何內容(如果沒有dateStyle或dateF,它也不會將日期格式化爲字符串ormat set)。 我即將發佈相同的響應,但你秒打我! – 2009-07-09 05:46:14

+0

真棒回答。我從來沒有想過這樣做。謝謝你的回答,如果你問我,這很好。 – 2009-07-09 07:01:11

+0

這對於亞洲語言來說看起來效果不錯。 – 2009-12-15 04:55:38

10

以上答案的問題是@"y,"@" y"都是與本地化有關。我只是在計算機上將日期和時間格式設置爲日語,韓語和其他一些格式。你會發現有時候,一年中會用當地語言中的符號表示,或者有時會使用一段時間,或者其他一些可能性。因此,如果您希望保持正確的本地化依賴性,則需要搜索並替換所有這些可能性。

有一種方法+dateFormatFromTemplate:options:locale:它可以幫助,雖然它不採用日期或時間的風格,所以它不那麼靈活。

我不確定有來自Apple的其他API的良好解決方案。但即便如此,他們還不清楚他們是否將自己的本地化分解爲組件。沒有這個,這實際上是一個不可能完成的任務。

16

距離Ios 4.0做它的正確的方法(見從WWDC 2012定位會話),支持不同語言環境的變化開箱,使用下列API上述

+dateFormatFromTemplate:options:locale: 

例如如所提到的,得到一個長日期格式,而不年:

NSDateFormatter* dateFormatter = [[NSDateFormatter alloc] init]; 
NSString *longFormatWithoutYear = [NSDateFormatter dateFormatFromTemplate:@"MMMM d" options:0 locale:[NSLocale currentLocale]]; 
[dateFormatter setDateFormat:longFormatWithoutYear]; 
//format your date... 
//output will change according to locale. E.g. "July 9" in US or "9 de julho" in Portuguese 
相關問題