轉換日期字符串到日期的問題,我見過很多線程日期字符串轉換爲日期,但沒有爲我工作。以下是我想要做的。斯威夫特3
我有一個的UIDatePicker,我想獲得選定的日期和時間。我得到正確的日期,但時間不正確。問題在於時區。下面給出我使用的代碼。
let abbreviation = TimeZone.current.abbreviation() //Without this also same issue happens
let dateFormatter = DateFormatter()
dateFormatter.locale = NSLocale.current
dateFormatter.timeZone = NSTimeZone.init(abbreviation: abbreviation!) as TimeZone!
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss"
let selectedDateStr = dateFormatter.string(from: self.timePicker.date) //Prints: "2017-04-20 07:50:40"
let selectedDateFromStr = dateFormatter.date(from: selectedDateStr)! as Date as NSDate //Prints: "2017-04-20 02:20:40 +0000"
如何在沒有時區問題的情況下獲得正確的時間?
下面是實際的場景 - 更新:
我想讓用戶設定的時間報警。我有兩個視圖,一個是從timepicker中選擇時間,另一個是顯示鬧鐘時間列表。
如果我選擇器中選擇一種時間,並顯示在列表中的報警,將始終顯示當前時間。使用上面給出的代碼。 但是如果我殺了應用程序並重新打開,它會顯示正確的時間!
這裏發生了什麼?
日期是否正確。 '打印'日期'的輸出始終是UTC。順便說一句:不要使用基礎類與'NS'前綴斯威夫特3.使用原生結構('Locale','TimeZone','Date') – vadian
我知道了。但我如何獲得正確的時間? – Mithun
日期格式化程序會爲您提供正確的時間。如果將'selectedDateFromStr'轉換回'Date',它將與'self.timePicker.date'相同。 「日期」是一個時間(「雙」),它是與UTC參考日期的差異。它不包含時區或區域設置信息。與* raw *'Date'對象進行數據計算,並使用格式化程序進行人類可讀的表示。 – vadian