こんにちは〜 磯崎@OfficeHAKONIWA でございます。
今日はサクッとタイトルの件、、、
アプリ内の一覧表示とかで何かと日付表示することが多いです。
仮にcopydateにNSDate定義の日付が入っていたとして、
今までは
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
[formatter setDateFormat:@"yyyy-MM-dd(E) HH:mm:ss"];
NSLog(@”copydate: %@”, [formatter stringFromDate:copydate]);
こうしてformatter通して
2012-12-05(水)11:16:22
という感じで西暦年月日+曜日+時刻を出力していました。
が、おそらくiOS6から、できなくなっちゃった。
具体的にはiPhoneのカレンダー設定で和暦にしているときで
「設定」ー「一般」ー「言語環境」ー「カレンダー」の和暦チェックです。
2012-12-05(水)11:16:22 が
0024-12-05(水)11:16:22 になりますです。
そんなもんで、新作を出すときにぱぱっと探して「な〜んだ、yyyyをYYYYにすりゃいいんじゃん。」と安易にやってた、ですが、これも誤りだと判明して。。。
どうやらNSDateFormatter定義にカレンダーの設定が必要だった模様。
いろいろあるけどグレゴリ暦でOKでした。
修正後はこんな感じになりました。
NSDateFormatter *formatter = [[[NSDateFormatter alloc] init] autorelease];
NSCalendar *gregorianCalendar =[[NSCalendar alloc]initWithCalendarIdentifier:NSGregorianCalendar];
[formatter setCalendar:gregorianCalendar];
[formatter setDateFormat:@"yyyy-MM-dd(E) HH:mm:ss"];
NSLog(@”copydate: %@”, [formatter stringFromDate:copydate]);
[gregorianCalendar release];
これだけの話で、カレンダー未定義なフォーマッターを使ってたのがそもそも悪かった気がします。
同じ表示しているアプリも多数見かけたので、と思ってシェアしました。
カレンダーの定義してないかも、という人は要チェックです!
Pingback: Cocoamix.jp » [Xcode]和暦表示への対応