0

(这适用于 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”的时间已经完成,甚至代码运行的时间都没有

所以我们在这里至少有两种可能性 - 基本上 NSDateDetector 无法处理 Apple 在 iPhone 上编码日期的标准格式,或者我在我的代码中犯了一个我找不到的明显错误。如果第二个是真的,我会很高兴,所以你能告诉我我做错了什么吗?

哦,我在 Mavericks / XCode 5 上运行它。有人吗?请?-ch

4

1 回答 1

2

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

如果你想解析日期,你应该使用NSDateFormatter.

于 2014-12-12T10:34:10.390 回答