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

时间:2016-05-04 18:35:41

标签: ios swift nsdateformatter

我有以下代码:

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,因为格式与输入字符串相同?

1 个答案:

答案 0 :(得分:1)

您的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)