无论我做什么,我都无法将RSS pubDate(当然是一串字符串)转换为Date
。
这是日期字符串:Sun, 02 Apr 2017 19:31:18 GMT
这是我的代码:
private var dateBuffer: Date {
formatter.dateFormat = "EEE, dd MMM yyyy hh:mm:ss zzz"
let date = formatter.date(from: buffers["pubDate"]!) //<-date comes back nil
return date! //<-program crashes
}
date
始终返回nil
。可能是什么问题??
答案 0 :(得分:3)
如果您非常确定 buffers["pubDate"]!
等于&#34; Sun,2017年4月2日19:31:18 GMT&#34; (或任何具有相同格式的日期),则应为:
var dateBuffer: Date {
let formatter = DateFormatter()
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
let date = formatter.date(from: buffers["pubDate"]!)
return date!
}
请注意,差异为HH:mm:ss
而非hh:mm:ss
。要将小时数作为24小时惯例阅读,您应该使用HH
。
另外,为了更安全 - 从任何意外崩溃 - 我建议做一些可选绑定,如下所示:
var dateBuffer: Date? {
let formatter = DateFormatter()
let str:String? = "Sun, 02 Apr 2017 19:31:18 GMT"
formatter.dateFormat = "EEE, dd MMM yyyy HH:mm:ss zzz"
if let pubDate = buffers["pubDate"], let date = formatter.date(from: pubDate) {
return date
}
return nil
}
if let myDate = dateBuffer {
print(myDate)
}
答案 1 :(得分:-1)
您似乎使用的是其他语言/区域设置而不是英语,但您的工作日名称是英文(“Sun”)。
如果将语言环境设置为英语,格式化程序将按预期工作:
formatter.locale = Locale(identifier: "en")
此外,格式必须为EEE, dd MMM yyyy HH:mm:ss zzz
(由于24小时时间为大写H)