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

时间:2017-04-08 18:11:24

标签: ios swift date nsdateformatter

无论我做什么,我都无法将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。可能是什么问题??

2 个答案:

答案 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)