如何将字符串转换为 NSDate?

How to convert String to NSDate?

每当有新的远程 notifications.I 正在为我的后端使用解析时,我都会收到字符串。我检索到的字符串来自 "createdAt" 列。

我试过下面的代码:

    var ca = "2015-07-03T03:16:17.220Z"
    var dateFormater : NSDateFormatter = NSDateFormatter()
    dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss'Z'"
    let date = dateFormater.dateFromString(ca)

    println(date)

但是 println 给了我 nil,我认为我的日期格式有问题。我该如何解决这个问题?

你错过了毫秒数。因此:

dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

请注意,从日期字符串转换为 NSDate 时,不应引用 Z。如果您引用 Z,它将匹配文字 Z 字符,但不会正确反映此日期字符串实际上是 Zulu/GMT/UTC.


如果你想创建格式器也采用另一种方式,将 NSDate 对象转换为字符串,在这种情况下你应该引用 Z,但在这种情况下你必须记住明确设置时区:

dateFormater.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSS'Z'"
dateFormater.timeZone = NSTimeZone(forSecondsFromGMT: 0)

顺便说一下,不要忘记按照 Apple Technical Q&A 1480 设置 locale

dateFormater.locale = NSLocale(localeIdentifier: "en_US_POSIX")