2

我无法让 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,但没有帮助。删除工作日似乎可行,但不能解释我的日期格式有什么问题。

4

1 回答 1

0

我不明白为什么会有工作日。它会造成日期不一致的可能性。你对“20130412 Tuesday”有什么期待?(未来读者注意: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(成功解析),但将错误的答案放入结果中。

于 2013-04-10T23:52:10.367 回答