Информацию о форматах даты см. В документации.
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")
Обратите внимание, что эта функция должна возвращать необязательную строку.Пусть вызывающая сторона решит, как обращаться с неверным вводом.
Также обратите внимание на специальный языковой стандарт, используемый для разбора входной строки.