Ios swift 3-无法将字符串转换为日期

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

无论我做什么,我都不能将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 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。非常感谢他们。。