来自字符串的 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!
}
我正在努力寻找一种从字符串解析 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!
}