来自字符串的NSDate(安全)

时间:2016-08-04 12:51:18

标签: ios swift nsdate nsdateformatter

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

例如,以下日期会导致崩溃:星期三,2014年3月12日17:13:54 +00000 \ n \ t \ 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") }

有什么建议吗?

3 个答案:

答案 0 :(得分:0)

这不应该导致崩溃。相反,dateFromString方法返回一个可选项,如果输入字符串与指定的日期格式不匹配,则为nil。正如您所做的那样,您需要针对该案例进行防御性编码。

如果您强制解包生成的可选项,那么崩溃的地方就是。您正在使用可选绑定,这是处理它的好方法。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

试试这段代码:

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!
}