きどたかのブログ

いつか誰かがこのブログからトラブルを解決しますように。

JapaneseImperialCalendarはクズだ。

あんまり使うことの無いものを使ってみた。


とりあえず、明治の開始日が間違ってるからダメダメだよ。


そんで持って、加減算した場合じゃないと元号を正しく扱えないっぽい。
それはどういうことかと言うと、


Locale locale = new Locale("ja", "JP", "JP");
Calendar cal = Calendar.getInstance(locale);
System.out.println(cal.getDisplayName(Calendar.ERA, Calendar.LONG, locale)); // 今なら平成と出るよ。


ただし、次にこういうのを付け足してみよう。
cal.set(Calendar.YEAR,1868); //ということやって、「明治」にしたいとする
System.out.println(cal.getDisplayName(Calendar.ERA, Calendar.LONG, locale)); // 残念ながら平成と出るよ。


先の方は、ERA=4,YEAR=20で、
後の方は、ERA=4,YEAR=1868になってるようだ。


西暦を和暦に変換する機能を持ってるわけではないっぽい。
いや、ひょっとしたらsetTimeInMillis(long)ならうまくいくか?と思いきや、それでもダメだった。
setTimeInMillis(long)でさえERAが変わらないのは、たぶんバグだと思う。
和暦のものを加減算する場合に和暦のまま扱えるだけじゃないかな。
和暦を西暦には出来るかもね。


Calendarでごちゃごちゃやるとしてもだよ、
JapaneseImperialCalendarか否かを意識して操作しないとダメじゃん。
だったら、publicなクラスにしとけ。