1

このコードはiOS5で機能しましたが、iOS6では間違った年を返します。

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、iOS6では日付2000を生成します。

ありがとう。

4

2 に答える 2

2

NSGregorianCalendarをNSISO8601Calendarに置き換えることで、この問題を修正しました。

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

これは機能しますが、理由がわかれば気分が良くなります。NSGregorianCalendarとNSISO8601Calendarの違いを知っている人はいますか?

于 2012-10-31T08:33:44.783 に答える
-1

AppleがIOS6に「独自のマヤ暦」を追加したように見えますが、ドキュメントでそれについての意見を見つけることはできませんが、私は自分で試してみて、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]);
于 2012-10-31T06:37:26.433 に答える