Преобразование строки в дату в Swift [дубликат]


На этот вопрос уже есть ответ здесь:

У меня есть дата в строке с форматом ниже кода, который нужно изменить в Date но я получаю nil

let addedDate = "Tue, 25 May 2010 12:53:58 +0000"
let formatter = DateFormatter()
formatter.dateFormat = "dd MM YYYY"
let date1 = formatter.date(from: addedDate)
print("DATE (date1)")

Введите описание изображения здесь

2 2

2 ответа:

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

Итак

formatter.dateFormat = "dd MM YYYY"

Должно быть

formatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"

Вам нужно преобразовать строку (addedDateString) в дату? (addedDate), то вы можете преобразовать его в строку (dateString), используя нужный формат. Обратите внимание: addedDate равен нулю, если преобразование из строки в дату не удалось.

import UIKit

let addedDateString = "Tue, 25 May 2010 12:53:58 +0000"

// Transform addedDateString to Date
let addedDateFormatter = DateFormatter()
addedDateFormatter.dateFormat = "E, d MMM yyyy HH:mm:ss Z"

if let addedDate = addedDateFormatter.date(from: addedDateString) {

    // Converstion String to Date return a valid Date
    print ("addedDate", addedDate)
    let dateFormatter = DateFormatter()
    dateFormatter.dateFormat = "dd MM YYYY"
    let dateString = dateFormatter.string(from: addedDate)
    print("Date: ", dateString)

} else {

    // addedDate == nil value when conversion String to Date failed
    print ("addedDateString not valid")

}

Вы также можете создать функцию. Что-то вроде этого:

func transformStringDate(_ dateString: String,
                         fromDateFormat: String,
                         toDateFormat: String) -> String? {

    let initalFormatter = DateFormatter()
    initalFormatter.dateFormat = fromDateFormat

    guard let initialDate = initalFormatter.date(from: dateString) else {
        print ("Error in dateString or in fromDateFormat")
        return nil
    }

    let resultFormatter = DateFormatter()
    resultFormatter.dateFormat = toDateFormat

    return resultFormatter.string(from: initialDate)
}

print (transformStringDate("Tue, 25 May 2010 12:53:58 +0000",
                           fromDateFormat: "E, d MMM yyyy HH:mm:ss Z",
                           toDateFormat: "dd MM YYYY") ?? "Error")