Этот код, который добавляет смещение временного интервала от GMT, неверно.Не делай этого.
Проблема, с которой вы сталкиваетесь, заключается в том, что по умолчанию даты отображаются в формате GMT (UTC).Вы можете использовать метод класса DateFormatter localizedDate, чтобы получить строку даты в текущей локали.
let datePickerDateString = DateFormatter.localizedString(from: datePicker.date,
dateStyle: .medium,
timeStyle, .medium)
let remindDateString = DateFormatter.localizedString(from: remindDate,
dateStyle: .medium,
timeStyle, .medium)
let nowString = DateFormatter.localizedString(from: Date(),
dateStyle: .medium,
timeStyle, .medium)
print("+++++++++++++DatePicker: \(datePickerDateString)++++++++++++++Date: \(remindDateString)++++++++++++++Now: \(nowString)+++++++++++++")
Я создал простое расширение класса Date, которое делает это намного проще:
extension Date {
func localString(dateStyle: DateFormatter.Style = .medium, timeStyle: DateFormatter.Style = .medium) -> String {
return DateFormatter.localizedString(from: self, dateStyle: dateStyle, timeStyle: timeStyle)
}
}
Это сворачивает ваш код до:
print("+++++++++++++DatePicker: \(datePicker.date.localString())" +
"++++++++++++++Date: \(remindDate.localString())" +
"++++++++++++++Now: \(Date().localString())+++++++++++++")
РЕДАКТИРОВАТЬ
Если вы устанавливаете дату выбора даты в метку, код может выглядеть следующим образом (при использовании Date
расширение выше)
myLabel.text = datePicker.date.localString()
(хотя учтите, что вам действительно следует сохранять дату в переменной экземпляра, когда пользователь изменяет ее, а не извлекать ее из средства выбора даты. Сохранение данных модели в объектах представления - это кодзапах.)