Swift DateFormatter在将String转换为Date时返回nil

时间:2018-01-18 13:16:51

标签: swift nsdateformatter

我正在尝试转换字符串:

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

类似

January, 18, 2018

使用DateFormatter但失败了。我尝试了其他问题(thisthisthis)。

这是我打印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)

2 个答案:

答案 0 :(得分:1)

您的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*/

答案 1 :(得分:1)

只有当日期字符串的格式与DateFormatter匹配时,dateFormat才能将字符串转换为日期 - 在您的示例中不是这种情况。出于这个原因,它正确回复nil回复。