此代码适用于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!
感谢。
答案 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]);