2012-02-27 38 views
4

我試圖格式化從RSS提要日期:NSDateFormatter關閉一小時

星期一,2012年2月27日10:33:00 EDT(從RSS feed格式)

要:

星期一,2012年2月27日上午10:33

這裏是我的代碼正在做:

NSDateFormatter *dateFormat = [[NSDateFormatter alloc] init]; 
[dateFormat setDateFormat:@"EE, d MM yyyy HH:mm:ss zzz"]; 

NSDate *date = [dateFormat dateFromString:@"Mon, 27 Feb 2012 10:33:00 EDT"]; 

[dateFormat setDateFormat:@"EE, d MMM yyyy hh:mm a"]; 

formatedDateLabel.text = [dateFormat stringFromDate:date]; 

[dateFormat release]; 

然而,這總是輸出:

星期一,2012年2月27日上午9:33

請注意,我的設備設置爲EST。我已經嘗試調整日期格式化程序來匹配EDT,但這似乎沒有任何區別。

關於我在做什麼錯的任何想法?

+0

所以,爲了確保您在輸出之前已經嘗試過'dateFormat.timeZone = [NSTimeZone timeZoneWithAbbreviation:@「EST」]'? – yuji 2012-02-27 17:16:12

+0

嗨yuji,我試着將它設置爲EST和EDT。奇怪的是我得到了同樣的結果。如果我將它設置爲格林威治標準時間,日期時間將正確顯示。 – 2012-02-27 17:19:17

回答

2

你沒有做錯什麼。出現這種情況的原因是因爲EDT和EST的的NSTimezone內部表示是相同的:

// These objects are the same: 
[NSTimeZone timeZoneWithAbbreviation:@"EST"]; 
[NSTimeZone timeZoneWithAbbreviation:@"EDT"]; 

NSDateFormatter dateFromString:是足夠聰明,知道,從2月的日期標記EDT應該有一個GMT -4偏移,而不是 - 5,儘管這不是一個完整的日期。但是,如果您將其用於顯示日期,如果其時區設置爲EST或EDT(它視爲同一事物),則會根據當時是否實行夏令時來使用適當的時區。

+0

這是有道理的,但我/是的問題是文章發佈在10:33:00,但NSDate格式返回它作爲9:33:00我忘了提到這個問題。然而,當我將鏈接發佈到RSS feed時,我注意到Engadget的RSS頁面中的日期表現出相同的行爲(一小時關閉),所以它看起來像是一個Engadget問題。無論如何感謝確認Yuji,這仍然是有幫助的後。 -乾杯 – 2012-02-27 18:04:07