为什么NSDateFormatter不会解析这个日期?

时间:2013-04-10 23:03:27

标签: ios objective-c nsdateformatter

我无法让NSDateFormatter识别我传入的这个日期。我很确定这与工作日有关,但我无法理解。

NSString *testDate = @"20130412 Friday";
NSDateFormatter *df = [[NSDateFormatter alloc] init];
df.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
df.dateFormat = @"yyyyMMdd cccc";
NSDate *result = [df dateFromString:testDate];
NSLog(@"test: %@, result: %@", testDate, result);

这将给我一个1999-12-30的结果日期。我在工作日尝试过eeee和EEEE,但没有用。删除工作日似乎有效,但没有解释我的日期格式有什么问题。

1 个答案:

答案 0 :(得分:0)

我不明白工作日的原因。它会造成日期不一致的可能性。你对“20130412星期二”有什么期望? (请注意未来读者:20130412实际上是星期五)我检查http://userguide.icu-project.org/formatparse/datetime并且没有禁止添加星期几,但对我来说这似乎是一个坏主意。

但是,NSDateFormatter似乎没有正常运行。我在iOS 6.1模拟器和OS X 10.8.3上进行了测试,并在两个平台上获得了相同的结果。我甚至扩展了一点,添加

id longResult;
NSError *error;
NSRange range = NSMakeRange(0, testDate.length);
if (![df getObjectValue:&longResult forString:testDate range:&range error:&error]) {
    NSLog(@"error: %@ reason:%@", error.localizedDescription, error.localizedFailureReason );
}

NSLog(@"result: %@", longResult);
NSLog(@"%@", NSStringFromRange(range));

在您的代码下方并生成

2013-04-10 16:45:27.921 date formatter fun ios[47350:c07] test: 20130412 Friday, result: 1999-12-31 07:00:00 +0000
2013-04-10 16:45:27.922 date formatter fun ios[47350:c07] result: 1999-12-31 07:00:00 +0000
2013-04-10 16:45:27.922 date formatter fun ios[47350:c07] {0, 15}

它正在尝试解析,返回YES(成功解析),但在结果中输入了错误的答案。