NSDataDetector无法在“2014-11-21T08:05:16 + 0400”中检测日期和时间

时间:2014-12-12 10:10:41

标签: objective-c macos date nsdatadetector

(这适用于OSX,尚未在iOS上测试)

在你问'为什么这么愚蠢的日期格式'之前:我使用从iPhone / iPad上创建的文件中提取的元数据。照片和视频包含“creationDate”元数据标记,该标记以完全相同的格式返回NSString。现在如果我提供这个字符串:

@ “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 个答案:

答案 0 :(得分:2)

NSDataDetector并不是要解析那样的日期。数据检测器旨在检测人类"书面文字中的模式。

如果要解析日期,则应使用NSDateFormatter