2011-01-11 121 views
3

我有類似2011-01-19T20:30:00-5:00的字符串,我想將它們解析爲NSDate,但我想保留原始時區。使用NSDateFormatter保留原始時區

NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setDateFormat: @"yyyy-MM-dd'T'HH:mm:ssZ"]; 
NSLog(@"%@", [dateFormatter dateFromString: dateString]); 
[dateFormatter release]; 

這片斷讓我2011-01-20二點三十分00秒+0100這也是正確的,但我希望在保持原有的時區-0500,而不是我的本地時區+0100 NSDate的。

回答

0

首先,你應該知道的NSDate對象不存儲與他們的語言環境或任何時區,並在內部他們本質上表現爲自2001年1月,北京時間1的第一瞬間的秒數。

如果你能在時區中的NSTimezone對象的字符串,只是做了以下做dateFromString前:

[dateFormatter setTimeZone:timezoneForString]; 

,你會被設定。

如果您無法獲得NSTimezone,而您擁有的只是一個字符串「2011-01-19T20:30:00-5:00」,那麼從NSTimezone進入NSTimezone的方式並不是很好-5:00,因爲並非總是以明確的方式來獲得一個時區ID(例如,「美國/洛杉磯」)或時區的名稱(例如,「太平洋夏令時」)從UTC偏移。所以你必須編寫自己的代碼來手動提取的偏移量,存儲,並顯示它之前添加到時間。