为什么我在 Swift 中使用 NSDateFormatter 传递输入日期字段后得到 nil?

Why I'm getting nil after pasing input date field with NSDateFormatter in Swift?

我有如下一段代码:

messageDictionary["date"] = dataArray[3] as! String
print(messageDictionary["date"])
let dateFormatter = NSDateFormatter()
dateFormatter.dateFormat = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"

let sent_date = dateFormatter.dateFromString(messageDictionary["date"] as! String)

print("SENT DATE IS \(sent_date)")

它的输出是:

Optional(2016-28-04T18:05:34.978UTC)
SENT DATE IS nil

为什么在第二行我得到 nil 因为格式与输入字符串相同?

您的 dateFormatter dateFormat 与您尝试从中创建 NSDate 的字符串不同。

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

应该是:

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

但是,如果您使用不同的日期格式,我建议为 NSDate 创建一个扩展:

extension NSDate {

  enum DateFormats: String {
      case ISO = "yyyy-MM-dd'T'HH:mm:ss.SSSZ"
      case YYMMDD = "yyyy-MM-dd"
  }

  convenience init?(dateString: String, format: DateFormats) {
      let dateFormatter = NSDateFormatter()
      dateFormatter.dateFormat = format.rawValue

      guard let d = dateFormatter.dateFromString(dateString) else { return nil }
      self.init(timeInterval: 0, sinceDate: d)
  }
}

有了这个你现在可以做到:

let newDate = NSDate(dateString: "2016-28-04T18:05:34.978UTC", format: .ISO)