Java9で新元号対応
2019年から元号が新しくなるというニュースがあり、関連してJavaで新元号対応するには…という話題も聞こえてきましたので私も調べてみました。
よく見かけたのは calendars.properties
を編集する、というものでしたが、それとは異なる回答も出せそうなのでここに記載します。
まず、Oracle社の公式見解ですが、
元号(和暦) (Hiroyuki Yoshino's Blog):
新元号が決定された場合、Java SEの最新リリースでの対応をお待ちいただくことになりますが、Googleなどで検索してみると、アプリケーション開発での独自の対応(calendars.properties ファイルの編集など)を考えている方もいらっしゃるようです。
ということだそうです。
ちなみにJava8のサポート期間は(現時点の予定では)2017年9月だそうなので、Java8で新元号サポートを受けるには有償契約が必要になりますね。
続いてJava9の事情ですが、次のようなIssueが挙がっていました:
コード差分を見ると次のような対応になっています:
calendars.properties
に記述されていたデフォルト設定は削除され、LocalGregorianCalendarクラスにハードコードされるようになった。- 追加の設定は
jdk.calendar.japanese.supplemental.era
プロパティで行うようになった。
つまり、Java9では、calendars.properties
に新元号をセットすれば良い、というわけではなくなりそうです。現在多く流通している情報では対応できない、ということです。
早速OpenJDK9-ea(build152)をダウンロードしてこのIssueに付随していたテストケースを実行してみたところ、…あれ、失敗しました。
あらためて、リポジトリからとってきた最新ソースからビルドしたOpenJDK9でテストケースを実行すると…成功しました。
この辺のソース管理について理解していないのですが、まだEA版にはマージされてはいないようですね。