2012-06-28 363 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