我們的iOS的iPhone應用程序,包含此代碼,在iOS 5中產生如下命名resultDate一個有效的NSDate對象:iOS 6.1 NSDateFormatter自iOS 5以來發生了變化 - 破解解析?
static NSDateFormatter *invariantFmt = nil;
if (!invariantFmt) {
invariantFmt = [[NSDateFormatter alloc] init];
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US_POSIX"];
[invariantFmt setLocale:locale];
[locale release];
[invariantFmt setDateStyle:NSDateFormatterShortStyle];
[invariantFmt setTimeStyle:NSDateFormatterMediumStyle];
}
NSDate *resultDate = [invariantFmt dateFromString:@"08/04/2010 10:43:39 AM"];
升級到了XCode 4.6和iOS 6.1後,該代碼現在給出resultDate一個零,所以他們用來解析的東西已經改變了。發行說明中沒有提到有關NSDateFormatter更改的信息。互聯網研究只是發現他們可能已經改爲使用更新的Unicode UTS語言環境解析標準。顯然他們改變了東西。在用代碼編寫代碼並獲取已知的有效NSDate對象並應用相同的NSDateFormatter設置來獲取NSString後,我發現iOS 6.1喜歡使用此字符串:@「08/04/2010,10:43:39 AM」
唯一的區別是在日期部分之後多餘的逗號。在iOS 6.1中使用該代碼可以使用相同的上述代碼返回有效的日期。任何人看到這一點,並理解爲什麼這是不同的,或者如果這是一個好的Unicode更改或Apple錯誤?
你應該向Apple提交一份錯誤報告。 – trojanfoe 2013-02-08 14:20:13
或者我應該停止使用日期「樣式」(短,中,長)並使用精確的格式,比如調用setDateFormat來代替?這樣做似乎在這兩種iOS版本中都有效。 – stonedauwg 2013-02-08 14:27:50
雖然這不會讓i18n變得困難嗎? – trojanfoe 2013-02-08 14:28:54