我刚刚将我的应用程序代码迁移到 Swift 3,我遇到了 DateFormatter(以前称为 NSDateFormatter)这个非常烦人的问题,而我在 Swift 2 或更早版本中没有。
问题是我需要将字符串转换为 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 仅供参考,我在澳大利亚进行这项开发。
我从我的应用程序的 UI 获取日期字符串,从 UI 获取它是 2017-02-22 所以我需要将该字符串转换为 Swift 中的 Date(或 NSDate)对象。
我尝试为 DateFormatter 设置 TimeZone 和 Locale,
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-02-21 而不是 2017-02-22 我已经查看了其他一些 SO 问题,例如
在其他人中。关于如何达到我想要的结果的任何想法?在 Swift 之前,这段代码运行良好。