【发布时间】:2012-10-31 06:09:34
【问题描述】:
此代码在 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!
谢谢。
【问题讨论】:
-
登录
date会看到什么? -
将 9000 更改为 2012 在 iOS 5 和 6 上始终给出相同的结果。stringFromDate 和原始 NSDate 在 iOS 5 和 6 中都是一致的,比如 2012 年。也许 9000 有点奇怪!
-
它适用于 3512 但不适用于 3513,即我猜它可以继续使用 1500 年
-
非远程日期在 iOS 5 和 6 上都能正常工作。远距离日期仅在 iOS 5 上有效。在 iOS 6 中,NSGregorianCalendar 似乎不适用于远距离日期。似乎需要 NSISO8601Calendar 代替。这是我可以安全更改的东西吗?
-
我检查并发现在 3512 返回 19 世纪和 20 世纪的日期之后的所有年份的行为都是相同的。
标签: iphone nsstring ios6 nsdate