2011-10-28 32 views
16

解析日期可能重複:
Converting an ISO 8601 timestamp into an NSDate: How does one deal with the UTC time offset?爲什麼NSDateFormatter不能從ISO 8601格式

我用導軌作爲後端,默認的日期輸出爲2008-12-29T00:27: 42-08:00

但經過我的研究NSDateFormatter不能支持它,除了我將日期更改爲2008-12-29T00:27:42-0800

這裏是我用來解析ISO 8601的日期代碼,但它不能正常工作

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSLog(@"%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-08:00"]); 

任何想法?

+0

@Ryan它知道這個鏈接,我只是想獲得更好的解決方案。 – allenwei

+0

您是否找到了解決方案?我正在尋找一種解決方案,可以爲格式爲「2008-12-29T00:27:42-08:00」的日期提供NSDate或NSString。接受的答案不適合我。有問題的部分是時區,即「-08:00」。 – Mustafa

回答

48

問題在於最後的時區。

您需要將它作爲:GMT-0X:00或-0X00,小時和分鐘之間沒有分開。

以下兩個組合工作:

組合1 - 使用GMT格式(GMT-0X:00)和ZZZZ

NSDateFormatter* dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZZ"]; 
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42GMT-08:00"]); 

組合2 - 使用RFC 822格式(-0X00)和ZZZ

dateFormatter = [[[NSDateFormatter alloc] init] autorelease]; 
[dateFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ssZZZ"]; 
NSLog(@"DATE FORMAT:%@", [dateFormatter dateFromString:@"2008-12-29T00:27:42-0800"]); 
+1

根據http://www.w3.org/TR/NOTE-datetime 2008-12-29T00:27:42-08:00是有效的日期格式。我可以從Rails後端更改默認格式,但我認爲這不是一個好的解決方案。 – allenwei

+0

我嘗試了第二種解決方案,但時區有錯誤:「日期格式:2008-12-29 08:27:42 +0000」。 「-0800」變成「+0000」 – JastinBall

+1

這與2008-12-29T00:27:42Z 一起使用時返回nil,這也是ISO8601 http://en.wikipedia.org/wiki/ISO_8601 – AmineG