我刚刚将我的应用程序的代码迁移到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