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

設定が和暦になっている場合、
NSCalendar currentCalendar を使用し、
yyyyで表示してると、0025と表示されてしまうんです Σ(・・
NSDateComponentsで年を取得しても、和暦の年数が取得されます。
和暦設定iPhoneでアプリ内の西暦表示がおかしくなっちゃった! | あい!おー、えす。
利用するカレンダーを、西暦に固定してしまう方法だと、表示が崩れる事はないですね!
設定が和暦の場合は、和暦表示にしたい!
『2013年』は『平成25年』と表示したい場合、以下のようにカレンダーを判断するのが簡単。
calendarIdentifierがNSJapaneseCalendarだった場合が和暦。
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”;
とかね。
うちの子たちに対応しないといけなく、検索で見つからなかったので書いておきました。

コメント
[…] [Xcode]和暦表示への対応 […]