Swift DateFormatter returns 将字符串转换为日期时为零

Swift DateFormatter returns nil while converting String to Date

我正在尝试转换字符串:

2018-01-18 13:04:42 +0000

类似于

January, 18, 2018

使用 DateFormatter 但它失败了。我试过其他问题 (, and this).

这是我打印 nil 的简单代码:

let str = "2018-01-18 13:04:42 +0000" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "MMMM, dd, YYYY" 
dateFormatter.locale = Locale.current 
let mydate = dateFormatter.date(from: str) 
print(mydate)

您的 DateFormatter 期望原始字符串采用 January, 18, 2018 格式。您应该先将其转换为 Date,然后仅在 之后将其转换为另一种格式。

此外,在提及普通日历年时不应使用 YYYYSee this question for details.

let str = "2018-01-18 13:04:42 +0000" 
let dateFormatter = DateFormatter() 
dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss Z" 
dateFormatter.locale = Locale(identifier: "en_US_POSIX") 

guard let date = dateFormatter.date(from: str) else {
    return
}

let newDateFormatter = DateFormatter() 
newDateFormatter.dateFormat = "MMMM, dd, yyyy" 
let newStr = newDateFormatter.string(from: date)
print(newStr) /*January, 18, 2018*/

A DateFormatter 仅当日期字符串的格式与 dateFormat 匹配时才能将字符串转换为日期——在您的示例中并非如此。因此,它会正确响应 nil 回复。