NSDataDetector не может определить дату и время в "2014-11-21T08:05:16+0400"
(это относится к OSX, не тестировали на iOS)
Прежде чем спросить "почему такой глупый формат даты": я использую метаданные, извлеченные из файлов, созданных на iPhone/iPad. Фотографии и видео содержат тег метаданных creationDate, который возвращает строку NSSt именно в этом формате. Теперь, если я буду кормить эту строку:
@ "2014-11-21T08: 05: 16 + 0400"
в NSDateDetector следующим образом:
__block NSDate *detectedDate;
NSDataDetector *detector = [NSDataDetector dataDetectorWithTypes:NSTextCheckingTypeDate error:nil];
[detector enumerateMatchesInString:self
options:kNilOptions
range:NSMakeRange(0, [self length])
usingBlock:^(NSTextCheckingResult *result, NSMatchingFlags flags, BOOL *stop)
{ detectedDate = result.date; }];
NSLog(detectedDate.description);
Я получаю полностью поддельное значение:
"2014-12-12 14:16:00 CET"
- Дата "2014-12-12" - это сегодняшняя дата, а не 2014-11-21, как следует
- Время "14:16:00 CET" полностью изменено, даже не время выполнения кода
Таким образом, у нас есть по крайней мере две возможности - в основном NSDateDetector не может обработать стандартный формат, который Apple кодирует даты на iPhone, ИЛИ Я допустил явную ошибку в своем коде, которую не могу найти. Я был бы счастлив, если бы второе было правдой, так что вы можете сказать мне, что я делаю не так?
О, я запускаю это на Mavericks / XCode 5. Кто-нибудь? Пожалуйста? -ch
1 ответ
NSDataDetector
не предназначен для разбора таких дат. Детекторы данных предназначены для обнаружения "человеческих" паттернов в письменном тексте.
Если вы хотите разобрать даты, вы должны использовать NSDateFormatter
,