[Xcode]和暦表示への対応

日付表示をあんまり気にしていなかったら、2013年1月1日と表示したいのに、0025年1月1日と表示される。

設定が和暦になっている場合、
NSCalendar currentCalendar を使用し、
yyyyで表示してると、0025と表示されてしまうんです Σ(・・

NSDateComponentsで年を取得しても、和暦の年数が取得されます。

和暦設定iPhoneでアプリ内の西暦表示がおかしくなっちゃった! | あい!おー、えす。

利用するカレンダーを、西暦に固定してしまう方法だと、表示が崩れる事はないですね!

設定が和暦の場合は、和暦表示にしたい!

『2013年』は『平成25年』と表示したい場合、以下のようにカレンダーを判断するのが簡単。

calendarIdentifierNSJapaneseCalendarだった場合が和暦。

    NSCalendar *calendar = [NSCalendar currentCalendar];
    NSDateFormatter *dateFormatter = [[NSDateFormatter alloc] init];
    [dateFormatter setCalendar:calendar];
    
    NSString *ident = [NSString stringWithString:[calendar calendarIdentifier]];
    if(![ident isEqualToString:NSJapaneseCalendar]){
        [dateFormatter setDateFormat:@"yyyy/MM/dd"];
    }else{
        [dateFormatter setDateFormat:@"GGyy/MM/dd"];
    }
    NSString* strdate = [dateFormatter stringFromDate:birthday];
    [dateFormatter release];

最近の日付しか扱わないなら、年数で判断しても問題ないような気もする。
というのもなんとなく書いてみておく。

    //年月日を取得する
    NSUInteger flags = NSYearCalendarUnit | NSMonthCalendarUnit | NSDayCalendarUnit;
    NSDateComponents *cmp = [calendar components:flags fromDate:birthday];
    NSLog(@"%d / %d / %d",cmp.year,cmp.month,cmp.day);
    //100年以下は、和暦とか
    if(cmp.year > 100){
        [dateFormatter setDateFormat:@"yyyy/MM/dd"];
    }else{
        [dateFormatter setDateFormat:@"GGyy/MM/dd"];
    }

表示用の”yyyy/MM/dd”は、ローカライズすべし

これはまた別の事。

JP
“yyyy/MM/dd” = “yyyy’年’M’月’d’日'(EEE)”;

EN
“yyyy/MM/dd” = “EEE, MMM d, yyyy”;

とかね。

うちの子たちに対応しないといけなく、検索で見つからなかったので書いておきました。

スポンサーリンク

シェアする

  • このエントリーをはてなブックマークに追加

フォロミー

コメント

  1. […] [Xcode]和暦表示への対応 […]

コメントをどうぞ

メールアドレスが公開されることはありません。