Как получить точную дату с помощью ActionSheetDatePicker?

Здесь я пытаюсь выбрать дату из средства выбора даты.

Предположим, я выбрал 2018-02-05 из списка действий. но на выходе я получаю 2018-02-04.

вот следующий код, который я пробовал. В print(value) я получил следующий результат

Вывод: 2018-02-04 18:30:00 +0000

func dateAndTimePicker(_ sender: Any){
        let datePicker = ActionSheetDatePicker(title: "Date", datePickerMode: UIDatePickerMode.date, selectedDate: NSDate() as Date!, doneBlock: {
            picker, value, index in
            print(value) 

            return
        }, cancel: { ActionStringCancelBlock in return }, origin: (sender as AnyObject).superview!?.superview)
        datePicker?.show()
}

person Bhanuteja    schedule 29.01.2018    source источник


Ответы (1)


Средства выбора даты возвращают полную дату и время. Если ваше средство выбора даты отображает только даты, тогда оно всегда использует время 0:00. И Date не имеет часового пояса, поэтому вы всегда получаете дату 0:00 UTC, а не 0:00 в вашем местном часовом поясе. То, что вы получаете, верно, потому что если вы установите Date на время в вашем местном часовом поясе, это будет 5 февраля 2018 года.

Для приложений всегда полезно использовать внутреннее время в формате UTC и форматировать даты для местного времени при отображении даты и времени для пользователей. Таким образом, если кто-то отправляется в другой часовой пояс, данные по-прежнему верны для его нового местоположения. Вы делаете это с помощью DateFormatter. Простым примером может быть что-то вроде

    let formatter = DateFormatter()
    formatter.dateStyle = .short
    formatter.timeStyle = .short
    let localDateString = formatter.string(from: datePicker.date)
person Tom Harrington    schedule 29.01.2018
comment
Было бы полезно, если бы вы описали, как именно это не сработало. - person Tom Harrington; 31.01.2018