発火後忘失

FIRE AND FORGET

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版にはマージされてはいないようですね。