我有以下代码:
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
,因为格式与输入字符串相同?
答案 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)