[iOS] NSDateFormatter

暫時紀錄一下。有關於NSDateFormatter的用法。

之前我有寫過一次將NSDate表示成NSString的作法,只是那種是寫死的,只有三個選擇,萬一你只想表示年份和月份而不顯示日期呢?當然你可以自己設定格式,像是:


    [formatter setDateFormat:@"MM dd"];

這樣就只會顯示月份和日期,但是你就沒有了本地化的優點了。所以當你又想要本地化,又想要客製化你顯示的時間日期,你可以考慮這個方法:

dateFormatFromTemplateoptions: locale:
用此方法建立格式的實例,就可以達到這兩個需求。想要建立這樣的NSDateFormatter寫法概念如下:
  • 建立NSDateFormatter實例
  • 建立字串格式
  • 將NSDateFormatter實例的格式設定為此字串格式
一二兩步驟並無相對關係,所以可任意對調。以下是範例:

    // 建立NSDateFormatter實例

    NSDateFormatter *dateFormatter = [NSDateFormatter new];
    //  建立字串格式
    NSString *dateString = [NSDateFormatter dateFormatFromTemplate:@"MMMM dd" options:0 locale:[NSLocale currentLocale]];
    // 設定
    [dateFormatter setDateFormat:dateString];

重點是第二步,他建立的是NSString的實例。第二步的方法,第一個參數是你的格式,第二個參數很有趣,目前你只要輸入0就好,第三個參數就是讓系統去選擇目前的本地設定。最重要的是第三個參數,這樣就能達到本地化的效果。

第一個參數很有趣,我大概測了幾種:

@"MMdd"             // output:03/12
@"MMMdd"         // output:3月12日
@"MMMMdd"     // output:3月12日
@"MMMMMdd" // output:3月12日

大概M的數目跟顯示的詳細度有關,至於輸出的結果,大概是跟本地化有關,詳細的可以參考官方文件

留言