2014-04-07 89 views
1

我在Apple Dev論壇https://devforums.apple.com/message/956514上發佈了這個問題。我希望它也可以在這裏發佈。蘋果開發論壇沒有迴應。NSDataDetector和1900年之前的日期帶回錯誤的日期

每當我輸入的日期少於1900年,NSDataDetector匹配到錯誤的日期。

例如:

1201年1月1日的比賽,以2015年1月1日和1201年2月1日的比賽,以2014年2月1日

似乎在一月份,這比1900更早的任何日期回來與日期一月,但2015年與任何日期晚於一月但之前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

NSDataDetector使用正則表達式。使用正則表達式來分析日期有點有限。我猜NSDataDetector只能解析日期的正則表達式19xx20xx

我的建議 - 使用NSDateFormatter代替。

+0

如果您能夠修改此行爲將會很好。 –

+0

你應該在http://bugreport.apple.com上提交一個錯誤。 –

+0

有了NSDateFormatter,你不能輸入諸如「明天的午餐」之類的東西,你必須使用特定的日期格式來輸入日期。這不是用戶友好的。 –

1

蘋果公司修改NSDataDetectors的工作日期從1700年起。

對我的錯誤報告的響應是以下幾點:

我們降低了極限,但我們可能不會降低它多了很多。

DataDetectors的主要目標是處理結束日期 或將來的日期,這些日期更可能用於實際用戶 日曆事件。

添加更多年份可能會導致更多的誤報(例如某些電話爲 數字格式爲例),而歷史日期是次要使用 的情況。

我們正在關閉此報告。

似乎是一個合理的迴應。所以我現在就把它留在那裏。我認爲這對我現在很有用,因爲我還爲用戶提供了一個常規的NSDataPicker控件,他們可以輸入真正的舊日期。