2

在使用 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"
4

0 回答 0