1. 程式人生 > >iOS NSDateFormatter日期時間格式處理的用法

iOS NSDateFormatter日期時間格式處理的用法

最近在做新浪rss新聞xml解析過程中,遇到一個時間字串轉換的問題。

問題是:Wed, 3 Apr 2013 04:11:02 GMT (這個資料是在xml檔案中獲取的)要在這個字串中截取出04:11:02。

  注意:其中的GMT 要特別注意北京時間是GMT+8:00所以這個實際在網頁頁面顯示的時間是 要在這個時間的基礎上加上8小數的,也即是

Wed, 3 Apr 2013 12:11:02 GMT

請看圖就知道了

xml檔案:



網頁顯示:


顯然時間是相差8個小時的。

好了,說明了問題,下面就是解決方法了。

直接上程式碼就好了。

 NSString* string = @"Wed, 3 Apr 2013 04:11:02 GMT";
        NSDateFormatter *inputFormatter = [[NSDateFormatter alloc] init];
        [inputFormatter setLocale:[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]];
        [inputFormatter setDateFormat:@"EEE, dd MMM yyyy HH:mm:ss Z"];
        NSDate* inputDate = [inputFormatter dateFromString:string];
        NSLog(@"date = %@", inputDate);
        
        NSDateFormatter *outputFormatter = [[NSDateFormatter alloc] init];
        [outputFormatter setLocale:[NSLocale currentLocale]];
        [outputFormatter setDateFormat:@"HH:mm:ss"];
        NSString *str = [outputFormatter stringFromDate:inputDate];
        NSLog(@"testDate:%@", str);
輸出結果:
2013-04-03 12:52:53.714 date[410:303] date = 2013-04-03 04:11:02 +0000
2013-04-03 12:52:53.718 date[410:303] testDate:12:11:02

下面稍稍解說一下。

1、首先是生成一個對應於Wed, 3 Apr 2013 04:11:02 GMT格式的formatter,然後用這個formatter將這個字串轉成date型別的資料。對應第一段程式。

2、然後再生成一個你想要得到的時間格式的formatter,用這個formatter將這個date資料轉換成string型別(就是你想要的時間格式啦)。對應第二段程式。
3、上面可能會看到Locale,這個是幹什麼的呢?據網上資料說是為了適應中文環境,要不然會識別不出Wed這類的,要是英文環境就不用。大概就是這個意思吧。大家可以試著註釋掉這兩個Locale語句,發現真的不可以哦。

下面要說一下iOS-NSDateFormatter格式說明:

    G: 公元時代,例如AD公元
    yy: 年的後2位
    yyyy: 完整年
    MM: 月,顯示為1-12
    MMM: 月,顯示為英文月份簡寫,如 Jan
    MMMM: 月,顯示為英文月份全稱,如 Janualy
    dd: 日,2位數表示,如02
    d: 日,1-2位顯示,如 2
    EEE: 簡寫星期幾,如Sun
    EEEE: 全寫星期幾,如Sunday
    aa: 上下午,AM/PM
    H: 時,24小時制,0-23
    K:時,12小時制,0-11
    m: 分,1-2位
    mm: 分,2位
    s: 秒,1-2位
    ss: 秒,2位
    S: 毫秒
    Z:GMT

常用的時間格式有:
yyyy-MM-dd HH:mm:ss.SSS
yyyy-MM-dd HH:mm:ss
yyyy-MM-dd
MM dd yyyy