2013-04-10 63 views
2

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

+0

它给我2013-04-10 17:07:27.163内存[1409:f803]测试:20130412星期五,结果:2013-04-12 06:00:00 +0000 – HalR 2013-04-10 23:09:04

+0

只是猜测:你是否试过把* 6 * c在那里而不是四个? – Undo 2013-04-10 23:09:22

+0

6 cs没有区别。奇怪的是,HalR获得了不同的结果 - 我使用XCode 4.6并使用最新的ios sdk构建。你也是吗? – Dan 2013-04-10 23:16:44

回答

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(成功的分析),但将错误的答案到结果。

相关问题