Конвертировать дату в формат День, дата, месяц, год - PullRequest
1 голос
/ 17 апреля 2019

Я пытаюсь преобразовать строку даты из yyyy-MM-dd'T'HH:mm:ss.SSS'Z' в "день, дата, месяц, год", что-то вроде этого "понедельник, 01 января 2018 года".

Я использую свою вспомогательную функцию, котораяпреобразует строку даты из одного формата в другой.В приведенной ниже функции я не уверен, какой параметр нужно передать для to:

func convertDate(from inputFormat: String, to outputFormat: String) -> String {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = inputFormat
    if let dateInLocal = dateFormatter.date(from: self) {
        dateFormatter.dateFormat = outputFormat
        dateFormatter.amSymbol = "AM"
        dateFormatter.pmSymbol = "PM"
        return dateFormatter.string(from: dateInLocal)
    }
    return "NA"
}

Использование расширения выше, как показано ниже

dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSS'Z'", to: "")

1 Ответ

1 голос
/ 17 апреля 2019

Информацию о форматах даты см. В документации.

EEEE дает полное название дня недели.MMMM дает полное название месяца.dd дает двузначный номер месяца.yyyy дает четырехзначное число года.

Не заключайте в кавычки Z в формате ввода.Z в строке даты представляет часовой пояс строки даты.Если вы указываете Z в формате даты, то Z по существу игнорируется в строке как индикатор часового пояса, и средство форматирования даты будет анализировать строку даты, как если бы это было местное время, и даст вам неправильный результат.

Вот ваш очищенный код:

func convertDate(from inputFormat: String, to outputFormat: String) -> String? {
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = inputFormat
    dateFormatter.local = Locale(identifier: "en_US_POSIX")

    if let dateInLocal = dateFormatter.date(from: self) {
        dateFormatter.dateFormat = outputFormat
        dateFormatter.locale = Locale.current
        return dateFormatter.string(from: dateInLocal)
    }

    return nil
}

dateAndName = date.convertDate(from:"yyyy-MM-dd'T'HH:mm:ss.SSSZ", to: "EEEE, dd MMMM yyyy")

Обратите внимание, что эта функция должна возвращать необязательную строку.Пусть вызывающая сторона решит, как обращаться с неверным вводом.

Также обратите внимание на специальный языковой стандарт, используемый для разбора входной строки.

...