Ios swift 3-无法将字符串转换为日期
无论我做什么,我都不能将RSSs pubDate(当然是字符串)转换为日期 以下是日期字符串:Sun,2017年4月2日19:31:18 GMT 这是我的密码:Ios swift 3-无法将字符串转换为日期,ios,swift,date,nsdateformatter,Ios,Swift,Date,Nsdateformatter,无论我做什么,我都不能将RSSs pubDate(当然是字符串)转换为日期 以下是日期字符串:Sun,2017年4月2日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
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
}
日期总是返回零。如果您非常确定缓冲区[pubDate]!等于Sun,2017年4月2日19:31:18 GMT或任何具有相同格式的日期,则应为:
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)
}
看起来您使用的是英语以外的另一种语言/地区,但您的工作日名称为英语Sun 如果将区域设置为英语,则格式化程序将按预期工作:
formatter.locale = Locale(identifier: "en")
此外,格式必须为EEE,dd-MMM-yyyy-HH:mm:ss-zzz,大写字母为H,因为24小时时间这不是语言环境问题,而是关于格式本身,我不是投票人顺便说一句:是的,我知道了。这对我来说是可行的,如果语言环境都改变了,格式也更新为HH而不是HH。是的,这是小时的问题,而不是语言环境的问题。事实上,我正在与《纽约时报》进行测试。我想它再标准不过了,Shukran Ahmad先生,问题解决了没有,它不起作用。错误是使用hh表示小时,而不是@Ahamd F和Palle所述的hh。非常感谢他们。。