在Swift 3中将日期字符串转换为Date问题

时间:2017-04-20 06:28:56

标签: swift3 nsdate nsdateformatter uidatepicker xcode8

我见过很多用于将Date字符串转换为Date的线程,但没有什么对我有用。以下是我想要做的事情。

我有一个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中选择时间,另一个用于显示闹钟时间列表。

如果我从选择器中选择一个时间并将其显示在警报列表中,它将始终显示当前时间。使用上面给出的代码。 但是,如果我杀了应用程序并再次重新打开,它将显示正确的时间!

这里发生了什么?

1 个答案:

答案 0 :(得分:0)

试试这个

        var dateFormatters = DateFormatter()
        dateFormatters.locale = Locale.current
        dateFormatters.timeZone = TimeZone.current
        dateFormatters.dateFormat = "yyyy-MM-dd HH:mm:ss"
        let selectedDateStr = dateFormatters.string(from: self.timePicker.date)
        let selectedDateFromStr = dateFormatters.date(from: selectedDateStr)!

您正在将dateformatter timezone转换为字符串。