我剛剛將我的應用程序的代碼遷移到Swift 3,並且發現了DateFormatter(以前稱爲NSDateFormatter),這是我沒有用Swift 2或更早版本得到的令人討厭的問題。無法更改Swift 3中DateFormatter的時區
的問題是,我需要一個字符串轉換爲Date對象,我的代碼,這樣做是一樣的東西,
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd"
let dateStr1 = "2017-02-22"
let date1 = dateFormatter.date(from: dateStr1)
現在這工作正常,並預期在Xcode遊樂場,但是當我嘗試運行它從我的應用程序,date1返回2017-02-21 13:00:00 +0000即過去的一天,我需要date1是2017-02-22 fyi,我在澳大利亞,我在哪裏做這個發展。
我從我的應用程序的用戶界面獲取日期字符串,並從用戶界面它是2017-02-22,所以我需要將該字符串轉換爲Swift中的Date(或NSDate)對象。
我已經嘗試設置爲DateFormatter時區和語言環境,
dateFormatter.timeZone = TimeZone(identifier: TimeZone.current.identifier)
dateFormatter.locale = Locale.init(identifier: Locale.current.identifier)
但仍沒有運氣?
我也試圖從創建像日曆組件的日期,
var dateComponents = DateComponents()
var day = "22"
var month = "02"
var year = "2017"
dateComponents.day = Int(day)!
dateComponents.year = Int(year)!
print(TimeZone.current)
dateComponents.timeZone = TimeZone.current
dateComponents.month = Int(month)!
let userCalendar = Calendar.current
let date1 = userCalendar.date(from: dateComponents)
但仍然沒有得到正確的日期,即獲得的2017年2月21日,而不是2017年2月22日 我已經看了一些像
How do you create a swift Date object
Converting date between timezones swift
另做題當中OT她的。我如何才能達到我想要的結果的任何想法?此代碼在Swift之前完全正常工作。
爲什麼你認爲在你的問題中前4行代碼有什麼問題?這很好,很正確。 – rmaddy
2月22日在澳大利亞的午夜是UTC時間21日13:00。沒有錯。 – rmaddy
夠公平!我編輯了這個問題以使問題更清楚。 – cptdanko