2012-10-31 70 views
1

此代碼適用於iOS 5,但它在iOS 6中返回了錯誤的一年。任何想法爲什麼?dateFromString在iOS 6中無法正常工作

NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
    NSLocale *locale=[[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
    NSDateFormatter *dateFormatter=[[NSDateFormatter alloc] init]; 
    [dateFormatter setCalendar: gregorian]; 
    [dateFormatter setLocale: locale]; 
    [dateFormatter setDateFormat:@"yyyy"]; 

    NSDate* date=[dateFormatter dateFromString:[NSString stringWithFormat:@"9000"]]; 

    NSLog(@"Date: %@", [dateFormatter stringFromDate:date]); 

    [gregorian release]; 
    [locale release]; 
    [dateFormatter release]; 

以上產生iOS 5中的日期9000和iOS 6中的日期2000!

謝謝。

+0

如果你記錄日期,你會看到什麼? – rmaddy

+0

將9000更改爲2012可以在iOS 5和iOS 6上獲得一致的結果.stringFromDate和原始NSDate在iOS 5和iOS 6中都是一致的,比如2012年。可能與9000有些奇怪! – Bourne

+0

它適用於3512,但不適用於3513即它可以進入1500年,我猜 –

回答

2

我用NSISO8601Calendar更換NSGregorianCalendar固定的這個問題:

NSCalendar *gregorian=[[NSCalendar alloc] initWithCalendarIdentifier: NSISO8601Calendar]; 

這工作,但我會感覺更好,如果我知道這是爲什麼。有人知道NSGregorianCalendar和NSISO8601Calendar之間的區別嗎?

-1

它看起來像蘋果在IOS 6添加「自己的瑪雅日曆」我在文檔中找不到它,但我爲自己嘗試,它看起來像3512年後自動設置情人年如2013年(是年3513)2014(如果y 3514)等。

NSCalendar *gregorian = [[NSCalendar alloc] initWithCalendarIdentifier:NSGregorianCalendar]; 
NSLocale *locale = [[NSLocale alloc] initWithLocaleIdentifier:@"en_US"]; 
NSDateFormatter *dateFormatter = [NSDateFormatter new]; 
[dateFormatter setCalendar:gregorian]; 
[dateFormatter setLocale:locale]; 
[dateFormatter setDateFormat:@"yyyy"]; 

NSDate* date = [dateFormatter dateFromString:@"3512"]; 

NSLog(@"Date: %@", [dateFormatter stringFromDate:date]); 
+0

這應該是我認爲的評論.. – Yogi