1

此代码在 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!

谢谢。

4

2 回答 2

2

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

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

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

于 2012-10-31T08:33:44.783 回答
-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]);
于 2012-10-31T06:37:26.433 回答