新しい元号「令和」が決まり、IT屋はテストで忙しいかと思います。
とは言っても元号を使っているのは官公庁や一部の老舗だけな気がしないでもない。コンピューターには西暦、もしくはエポック(1970年1月1日0時0分0.0秒UTC)からのミリ秒とかで保管されているのがほとんど。帳票などに出力する時や入力画面で変換するのがメインでしょう。
Javaで元号を出力する
プログラム言語が元号に対応していれば、言語のアップデートを入れるだけで対応できちゃったり。Javaはバージョン8から日本の元号に対応しています!!
8はもうサポート終了しているので望みは薄いですが。
最新バージョン、11.0.2で元号を変換してみました。
使用するクラス:
import java.time.chrono.JapaneseChronology; import java.time.chrono.JapaneseDate; import java.time.chrono.JapaneseEra; import java.time.format.TextStyle; import java.util.Locale;
まずは、4月30日:
JapaneseChronology chronology = JapaneseChronology.INSTANCE; JapaneseDate date = chronology.date(2019, 4, 30); // 年月日 JapaneseEra era = date.getEra(); System.out.println(era.getDisplayName(TextStyle.FULL, Locale.JAPAN)); System.out.println(era.getDisplayName(TextStyle.SHORT, Locale.JAPAN)); System.out.println(era.getDisplayName(TextStyle.NARROW, Locale.JAPAN));
出力結果:
平成 平成 H
ちゃんとFULLは「平成」とNARROWは「H」と変換されますね。SHORTも「平成」ですが、「平」だったらもっと良かったのに。
では、5月1日:
JapaneseChronology chronology = JapaneseChronology.INSTANCE; JapaneseDate date = chronology.date(2019, 5, 1); // 年月日 JapaneseEra era = date.getEra(); System.out.println(era.getDisplayName(TextStyle.FULL, Locale.JAPAN)); System.out.println(era.getDisplayName(TextStyle.SHORT, Locale.JAPAN)); System.out.println(era.getDisplayName(TextStyle.NARROW, Locale.JAPAN)); System.out.println(era.getDisplayName(TextStyle.FULL, Locale.US));
出力結果:
元号 元号 N NewEra
まだ「元号」と出るだけでした。「N」って何だ?と思い、英語表記を出してみたら「NewEra」ということでした。
まとめ
Javaは言語レベルで元号に対応しているのはいいですが、まだ「令和」の名前は入っていないです。新しいバージョンで対応されるまでは、自力でやるしかないのかな?
if (era.getValue() == 3) { System.out.println("令和"); }