最近在做新浪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 +00002013-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.SSSyyyy-MM-dd HH:mm:ssyyyy-MM-ddMM dd yyyy