2016-12-21 98 views
-1

我想dateString這種格式"2016-12-22T08:00:00-08:00"轉換爲日期對象在用戶本地時間例如2016-12-22 21:30:00 +0530當用戶的時間是+05:30從UTC轉換日期字符串到本地時間日期對象斯威夫特

OR

欲dateString這種格式"2016-12-22T08:00"它是PST時間被轉換成日期對象在用戶本地時間例如2016-12-22 21:30:00 +0530當用戶的時間是05:從UTC或2016-12-22 16:00:00 +0000當用戶的時間是00 30 :00 from UTC

當我tr y下面的代碼和打印日期對象打印Optional(2016-12-22 02:30:00 +0000),但我想2016-12-22 21:30:00 +0530因爲我的本地時間是從UTC UTC05:30。

let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss-08:00" 
dateFormatter.timeZone = NSTimeZone.local 

let dateString = "2016-12-22T08:00:00-08:00" 
let dateObject = dateFormatter.date(from: dateString) 
print("dateObject \(dateObject1)") 
+0

不清楚爲什麼當問題清楚時以及在SO上沒有類似的問題時,它被拒絕投票。 – user44776

+1

我沒有投票,但有幾百個幾乎相同的問題。之前你一直沒有問過你問過的任何問題。 – rmaddy

+0

順便說一句,爲什麼你關心什麼時區產生的ISO 8601日期字符串顯示?此時區不是日期對象的一部分。大多數人實際上會使用GMT/UTC /祖魯語來避免這種混淆...... – Rob

回答

3

解決您的dateFormat到:

dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ssZZZZZ" 

取出timeZone線。由於日期字符串指定了自己的時區,因此不需要。

dateFormatter.timeZone = NSTimeZone.local // remove this line 

現在你的代碼工作正常。

「別急,的print(dataObject)輸出是不是我想要的」

是的。就像你之前的數千人一樣,你誤解了打印Date對象的輸出。

如果你想在本地時區查看Date,在給定的格式,用DateFormatterDate轉換爲String。您將默認獲取當前的本地時區。

let dateFormatter = DateFormatter() 
dateFormatter.dateStyle = .long 
dateFormatter.timeStyle = .long 
let newString = dateFormatter.string(from: dateObject) 
print(newString) 

而你得到的只是你想要的。

+0

您建議進行更改,當UTC時間爲+0530時,它仍以UTC時間打印出來。例如打印'可選(2016-12-22 16:00:00 +0000)',但我期待'可選(2016-12-22 21:30:00 +0530)' – user44776

+0

當然。不要在'Date'上使用'print'。直到你明白髮生了什麼,它纔會令人困惑。使用我在答案的後半部分發布的代碼來獲得所需的輸出(當然,您可以自由更改日期/時間樣式或使用特定格式來滿足您的需求)。 – rmaddy

+1

不相關,但是他也可能希望在第一個格式化程序中將'locale'設置爲'en_US_POSIX',該格式程序從IS8601/RFC3339字符串到'Date'對象,但是[技術問答1480](https: //developer.apple.com/library/content/qa/qa1480/_index.html)。 – Rob

相關問題