Преобразование строки в дату в Swift [дубликат]
На этот вопрос уже есть ответ здесь:
- дата не отображается в UILabel 2 ответа
У меня есть дата в строке с форматом ниже кода, который нужно изменить в 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 ответа:
Формат даты должен быть для строки, которую вы пытаетесь преобразовать, а не для формата, который вы хотите вернуть
Итак
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")