dateFromString在iOS 6中无法正常运行

时间:2012-10-31 06:09:35

标签: iphone nsstring ios6 nsdate

此代码适用于iOS 5,但它在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!

感谢。

2 个答案:

答案 0 :(得分:2)

我通过用NSISO8601Calendar替换NSGregorianCalendar来解决这个问题:

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

这样可行,但如果我知道原因,我会感觉更好。有没有人知道NSGregorianCalendar和NSISO8601Calendar之间的区别?

答案 1 :(得分:-1)

它看起来像Apple在IOS 6中添加了“自己的Maya日历” 我无法在文档中发现它,但我尝试自己和它看起来像3512年后自动设置情人年像2013年(是3513年),2014年(如果是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]);