Nano Hash - криптовалюты, майнинг, программирование

NSDataDetector и даты до 1900 года возвращают неправильную дату

Я разместил этот вопрос на форумах Apple Dev https://devforums.apple.com/message/956514. Я надеюсь, что это нормально, чтобы опубликовать это здесь также. На форумах разработчиков Apple пока нет ответа.

Всякий раз, когда я ввожу дату меньше 1900 года, NSDataDetector сопоставляет неправильную дату.

Например:

1 января 1201 совпадение с 1 января 2015 года и 1 февраля 1201 совпадение с 1 февраля 2014 года

Кажется, что любая дата в январе, предшествующая 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?


Ответы:


1

Apple модифицировала NSDataDetectors для работы с датами начиная с 1700 года.

Ответ на мой отчет об ошибке был следующим:

Мы снизили лимит, но, вероятно, не будем снижать его намного больше.

Основная цель DataDetectors — обрабатывать даты в ближайшем прошлом или будущем, даты, которые, скорее всего, будут использоваться для реальных событий календаря пользователя.

Добавление большего количества лет может привести к большему количеству ложных срабатываний (например, с некоторыми форматами телефонных номеров), а исторические даты являются второстепенным вариантом использования.

Мы оставляем этот отчет закрытым.

Вроде разумный ответ. Так что пока просто оставлю это. Я думаю, что это работает для меня на данный момент, поскольку я также предоставляю пользователям обычный элемент управления NSDataPicker, в который они могут вводить действительно старые даты.

19.10.2015

2

NSDataDetector работает с регулярными выражениями. Использование регулярных выражений для анализа дат немного ограничено. Я предполагаю, что NSDataDetector может анализировать только 19xx и 20xx регулярные выражения для дат.

Мой совет - используйте вместо этого NSDateFormatter.

07.04.2014
  • Было бы неплохо, если бы вы могли изменить это поведение. 08.04.2014
  • С NSDateFormatter вы не можете вводить такие вещи, как обед завтра, и вам нужно использовать определенный формат даты для ввода дат. Это не удобно для пользователя. 02.11.2014
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..