为什么我在 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)
我有如下一段代码:
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)