Я только что перенес код моего приложения в Swift 3, и я получаю эту очень неприятную проблему с DateFormatter (ранее NSDateFormatter), который я не получил с Swift 2 или ранее.Невозможно изменить часовой пояс для DateFormatter в Swift 3
Вопрос заключается в том, что мне нужно, чтобы преобразовать строку в объект 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 т.е. день в прошлом, и мне нужна дата1, чтобы быть 2017-02-22 fyi, я в Австралии, где я делая это развитие.
Я получаю строку даты из пользовательского интерфейса моего приложения, а из пользовательского интерфейса - 2017-02-22, поэтому мне нужно скрыть эту строку до объекта Date (или NSDate) в Swift.
я не попытался установить TimeZone и Locale для 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-02-21 вместо 2017-02-22 Я посмотрел на некоторые другие вопросы, как SO
How do you create a swift Date object
Converting date between timezones swift
среди О.Т. ее. Любые идеи о том, как я могу достичь результата, которого я хочу? этот код работал полностью отлично до Swift.
Почему, по вашему мнению, что-то не так с первым 4-строчным кодом в вашем вопросе? Это нормально и правильно. – rmaddy
Полночь 22 февраля в Австралии - 13:00 в 21-й UTC. Нет ничего плохого. – rmaddy
Достаточно честно! Я отредактировал вопрос, чтобы сделать проблему более ясной. – cptdanko