1

我在 Apple Dev 论坛https://devforums.apple.com/message/956514上发布了这个问题。我希望它也可以在这里发布。Apple 开发者论坛上还没有回复。

每当我输入小于 1900 年的日期时,NSDataDetector 都会匹配错误的日期。

例如:

1201 年 1 月 1 日匹配到 2015 年 1 月 1 日和 1201 年 2 月 1 日匹配到 2014 年 2 月 1 日

似乎早于 1900 年的 1 月份的任何日期都会返回 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 的一个已知问题?

4

2 回答 2

1

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

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

我们降低了限制,但我们可能不会再降低很多。

DataDetectors 的主要目标是处理最近的过去或将来的日期,这些日期更有可能用于实际的用户日历事件。

添加更多年份可能会导致更多误报(例如某些电话号码格式),历史日期是一个小用例。

我们将关闭此报告。

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

于 2015-10-19T20:17:15.097 回答
0

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

我的建议 -NSDateFormatter改用。

于 2014-04-07T09:28:46.543 回答