Swift:NSDataDetector用于字符串中的多个日期
在使用NSDataDetector分析日期字符串时,我遇到了一个有点出乎意料的结果: 我承认,lazy me发现用这种方式解析比在字符串中选择日期更容易:它适用于大多数语言,您不需要知道实际的格式。 它真的很有效,它确实会选择它找到的第一个日期(如果字符串描述了一个句点,那么您就可以找到另一个匹配的持续时间!) …除非字符串描述的时间段超过12月31日,并且超过大约2个月,例如“从12月1日到3月1日”,否则它将选择结束日期Swift:NSDataDetector用于字符串中的多个日期,swift,string,date,swift3,nsdatadetector,Swift,String,Date,Swift3,Nsdatadetector,在使用NSDataDetector分析日期字符串时,我遇到了一个有点出乎意料的结果: 我承认,lazy me发现用这种方式解析比在字符串中选择日期更容易:它适用于大多数语言,您不需要知道实际的格式。 它真的很有效,它确实会选择它找到的第一个日期(如果字符串描述了一个句点,那么您就可以找到另一个匹配的持续时间!) …除非字符串描述的时间段超过12月31日,并且超过大约2个月,例如“从12月1日到3月1日”,否则它将选择结束日期 当“从12月1日到2月1日”返回第一个日期时!有线索吗 (下面的代码不
当“从12月1日到2月1日”返回第一个日期时!有线索吗 (下面的代码不是在处理错误,是的,是故意挑选第一个匹配项,通常是第一个找到的日期)
func returnDateFromString( text: String) -> Date {
let types: NSTextCheckingResult.CheckingType = [.date ]
let detector = try? NSDataDetector(types: types.rawValue)
var aDate = Date() // default to today if none, no error check I know
let result = detector?.firstMatch(in: text, range: NSMakeRange(0, text.utf16.count))
if result?.resultType == .date {
aDate = (result?.date)!
}
return aDate
}
returnDateFromString(text: "from December 1 to February 1") // returns "Dec 1, 2017, 12:00 PM"
returnDateFromString(text: "from December 1 to March 1") // returns "Mar 1, 2017, 12:00 PM"