在使用 NSDataDetector 分析日期字符串时,我遇到了一个有点出乎意料的结果:我承认,懒惰的我发现这样解析更容易,而不是尝试在字符串中选择日期:它适用于大多数语言,你不需要知道实际格式。它真的很有效,它确实会选择它找到的第一个日期(如果字符串描述了一个句点,您将能够找到持续时间作为另一个匹配项!)。
…除非字符串描述的时间段超过 12 月 31 日,并且长于大约 2 个月,例如“从 12 月 1 日到 3 月 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"