来自字符串的 NSDate(安全地)

NSDate from string (safely)

我正在努力寻找一种从字符串解析 NSDate 的方法,如果出错,应用程序就会崩溃。

例如,以下日期会导致崩溃:2014 年 3 月 12 日,星期三 17:13:54 +00000\n\t\t\t\

我目前正在使用以下代码:

let trimmed  = unformatedDate.stringByTrimmingCharactersInSet(NSCharacterSet.whitespaceAndNewlineCharacterSet())

let dateFormatter = NSDateFormatter()

dateFormatter.dateFormat = "E, dd MMM yyyy HH:mm:ss zzzz"

if let tempDate = dateFormatter.dateFromString(trimmed) {

      print(tempDate)

} else { print("We have an error with the tempCreatedDate") }

有什么建议吗?

这应该不会导致崩溃。相反,dateFromString 方法 returns 是一个可选的,如果输入字符串与指定的日期格式不匹配,它将是 nil。你需要像你所做的那样为这种情况编写防御性代码。

如果您强制展开生成的可选项,您会崩溃的地方。您正在使用可选绑定,这是处理它的好方法。

您的问题是您的日期格式 "dd/MM/yyyy HH:MM:SS" 与您的日期字符串 "Tue, 12 Jul 2011 20:18:26 GMT" 不匹配。您需要使用不同的日期格式。

试试这个代码:

func nsDateFromString(myDate:String)-> NSDate{
    let dateFormatter = NSDateFormatter()
    dateFormatter.dateFormat = "yyyy-MM-dd" //format style. Browse online to get a format that fits your needs.
    let dateString = dateFormatter.dateFromString(myDate)
    return dateString!
}