Swift 从 NSHTTPURLResponse 获取 Last-Modified 属性作为 NSDate

Jan*_*der 4 type-conversion nsdate ios swift

我正在尝试获取 URLResponse 的最后修改属性作为 NSDate。我按照以下指示进行操作:

如何将字符串日期转换为 NSDate?

在 Swift 中将字符串转换为 NSDate

日期字符串到 NSDate swift

Swift 中从 String 到 NSDate

但它们都不起作用..我从 URLResponse-Object 中正确收到日期作为字符串,格式为“Mon, 19 Oct 2015 05:57:12 GMT”

我需要将此字符串转换为 NSDate 以便能够将其与 NSDate 形式的 localDate 进行比较:2015-10-19 05:57:12 UTC

我也尝试过不同的日期格式,但没有任何区别。

我当前的代码如下:

//The serverDate needs to match the localDate which is a
//NSDate? with value: 2015-10-19 05:57:12 UTC

if let httpResp: NSHTTPURLResponse = response as? NSHTTPURLResponse {
    let date = httpResp.allHeaderFields["Last-Modified"] as! String //EXAMPLE:  "Mon, 19 Oct 2015 05:57:12 GMT"
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd HH:mm:ss ZZZ"
    dateFormatter.timeZone = NSTimeZone(abbreviation: "UTC")
    let serverDate = dateFormatter.dateFromString(date) as NSDate?

    //conversion always fails serverDate == nil       
    println("ServerDate: \(serverDate)")    
}
Run Code Online (Sandbox Code Playgroud)

谁能解释一下为什么转换失败?我可以尝试其他方法来转换我的日期吗?

Lau*_*ent 5

斯威夫特 4、XCode 9:

let date = httpResponse.allHeaderFields["Date"] as! String
let dateFormatter = DateFormatter()
dateFormatter.dateFormat = "EEEE, dd LLL yyyy HH:mm:ss zzz"
let serverDate = dateFormatter.date(from: date)
Run Code Online (Sandbox Code Playgroud)

确实需要@MikeTaverne 建议的“HH”更改。

  • 不要忘记设置区域设置 `dateFormatter.locale = Locale(identifier: "en")`。 (2认同)