2016-07-29 123 views
0

我試圖從UTC時間字符串獲取NSDate對象。時間字符串的例子是這樣的:從UTC格式的時間字符串獲取NSDate

2016-07-29T11:43:55+02:00 

我使用NSDateFormatter並設置酸鹽,爲:yyyy-MM-dd'T'HH:mm:ss

但是這給了我取不正確的時區。所以上述日期將是:2016-07-29T09:43:55 + 00:00

我該如何保持時區方面?

我曾嘗試加入'Z'到格式化的結束,而是剛剛返回一個零日期。

+0

這是正確的。 9比當地時間晚兩個小時。 – Tander

+1

[轉換ISO 8601來的NSDate(http://stackoverflow.com/questions/17558859/convert-iso-8601-to-nsdate) – vadian

+0

您的日期格式是正確的,日期字符串正確地分析,所以有可能的複製你問你是如何檢測GMT抵消傳入的日期字符串? – Droppy

回答

2

試試這個

NSDateFormatter *userFormatter = [[NSDateFormatter alloc] init]; 
[userFormatter setDateFormat:@"yyyy-MM-dd'T'HH:mm:ss.SSSZ"]; 
NSLocale *posix = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
[userFormatter setLocale:posix]; 
NSString *dateConverted = [userFormatter stringFromDate:theDate]; 
+0

這是行不通的(格式化程序中缺少'T')並且它不回答問題。 – Droppy

0

感謝社會各界的幫助。解決了這個問題。我的iOS模擬器上的時間是正確的。不過,當我撥打[NSDate date];時,它顯示了當地時間兩小時前的一段時間。因此,我在NSDate的格式中看到了'錯誤'。

+0

顯示你在哪裏? NSLog()'有什麼機會? – Droppy

+0

是的,NSLog。是否有理由爲什麼iOS模擬器顯示正確的時間,但NSLog沒有? – Tander

+0

認真;這可能是stackoverflow上最常見的問題,我沒有看到任何iOS/OSX開發人員不知道的原因。 'NSLog()'調用'[NSDate description]'和'description'格式化UTC時區的日期。要在不同時區顯示日期,請設置一個'NSDateFormatter'(包括時區)並使用它來執行日期 - >字符串轉換。 – Droppy