我在Apple Dev论坛https://devforums.apple.com/message/956514上发布了这个问题。我希望也可以在这里发布。尚未在Apple dev论坛上做出回应。
每当我输入的日期小于1900年时,NSDataDetector会匹配错误的日期。
例如:
1月1日,1201对比2015年1月1日和2月1日,1201对比2014年2月1日
似乎1月份的任何一个日期早于1900年的那个日期在1月份回来,但是2015年。并且任何日期晚于1月但是在1900年之前的任何一年与2014年的那一天相匹配
这是我检测日期的代码:
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate error:&error];
NSArray *matches = [detector matchesInString:myDateString options:0 range:NSMakeRange(0, [myDateString length])];
for (NSTextCheckingResult *match in matches) {
if (match.resultType == NSTextCheckingTypeDate) {
determinedDate = match.date;
}
}
myDateString只是一个包含需要解析的日期值的字符串。
我做错了什么,或者这是NSDataDetector的已知问题?
答案 0 :(得分:1)
Apple修改了NSDataDetectors以适用于1700年以后的日期。
对我的错误报告的回复如下:
我们降低了限额,但我们可能不会降低更多。
DataDetectors的主要目标是处理近期的日期 或者将来,更有可能用于实际用户的日期 日历活动。
增加更多年份可能会导致更多误报(有些手机 例如数字格式)和历史日期是次要用途 情况下。
我们将关闭此报告。
似乎是一个合理的回应。所以我现在就把它留在那里。我认为这对我现在有用,因为我还为用户提供了一个常规的NSDataPicker控件,他们可以输入真正的旧日期。
答案 1 :(得分:0)
NSDataDetector
适用于正则表达式。使用正则表达式来解析日期有点受限。我想NSDataDetector
只能解析日期的19xx
和20xx
正则表达式。
我的建议 - 改为使用NSDateFormatter
。