2012-06-28 149 views
2

我有日期解析问题。它适用于我的设备和模拟器,而不是客户端设备上(这也是iPhone的iOS 5.1.1,但也许不同的配置)NSDateFormatter在测试设备上失败,NSInvalidValue失败,但在我的测试设备上失败

NSDateFormatter *formatter = [[NSDateFormatter alloc] init]; 
    NSDate   *date = nil; 
    NSError   *error = nil; 

    [formatter setDateFormat:@"EEE, dd MMM y HH:mm:ss zzz"]; 
    if (![formatter getObjectValue:&date forString:@"Mon, 21 Jun 2012 21:21:21 GMT" range:nil error:&error]) 
    { 
     NSLog(@"%@", error); 
    } 

其输出

Error Domain=NSCocoaErrorDomain Code=2048 "The operation couldn’t be completed. (Cocoa error 2048.)" UserInfo=0x446f10 {NSInvalidValue=Mon, 21 Jun 2012 21:21:21 GMT} 

回答

6

您需要设置日期格式化程序的地区设置为en_US_POSIX

formatter.locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"]; 
+0

非常感谢!任何想法为什么它可以在模拟器和设备上工作,但不是测试器设备?我甚至尝试过多种语言 –

+1

这取决于语言环境。如果用户在其设置中设置了该值,iOS会更改您的格式字符串以添加AM/PM,而不是使用24小时时钟。 'en_US_POSIX'语言环境不是这种情况。 – hypercrypt

+0

非常感谢。这节省了数小时的一个疯狂的bug,只会影响英国的客户,而不会影响北美的开发人员。 – Jeremy