NSDataDetector和1900年之前的日期会带来错误的日期

时间:2014-04-07 09:20:17

标签: objective-c nsdate nsdatadetector

我在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的已知问题?

2 个答案:

答案 0 :(得分:1)

Apple修改了NSDataDetectors以适用于1700年以后的日期。

对我的错误报告的回复如下:

  

我们降低了限额,但我们可能不会降低更多。

     

DataDetectors的主要目标是处理近期的日期   或者将来,更有可能用于实际用户的日期   日历活动。

     

增加更多年份可能会导致更多误报(有些手机   例如数字格式)和历史日期是次要用途   情况下。

     

我们将关闭此报告。

似乎是一个合理的回应。所以我现在就把它留在那里。我认为这对我现在有用,因为我还为用户提供了一个常规的NSDataPicker控件,他们可以输入真正的旧日期。

答案 1 :(得分:0)

NSDataDetector适用于正则表达式。使用正则表达式来解析日期有点受限。我想NSDataDetector只能解析日期的19xx20xx正则表达式。

我的建议 - 改为使用NSDateFormatter