日付表示をあんまり気にしていなかったら、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]和暦表示への対応 […]