将字符串转换为 Swift 中的日期

Converting a String to a Date in 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)")

日期格式必须适用于您尝试转换的字符串,而不是您想要返回的格式

所以

formatter.dateFormat = "dd MM YYYY"

应该是

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

您必须将字符串 (addedDateString) 转换为日期? (addedDate) 然后您可以使用所需的格式将其转换为字符串 (dateString)。请注意:当从 String 转换为 Date 失败时,addedDate 为 nil。

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")