Seita developer blog

ユーザ企業に努めるアプリケーションエンジニアがプログラミング、データベース、OS、SNS、ガジェットなどを中心に備忘録変わりに書いていきます。

【Java】新元号に対する和暦変換の対応状況について Java8 or 10 + Windows 10 April 2018 Update

今回は新元号に関して、少し検証を追加してみましたので紹介します。

 

■前回の和暦変換の記事

rey1229.hatenablog.com

 

前回は、過去(明治への改元)について紹介しましたが、

今回は2018/5/1の新元号への対応について、2018/5/27現在の状況を調査してみました。

 

■環境

Windows 10 build 1803 (Windows 10 April 2018 Update)

Oracle JDK 8(1.8.0_171)

&

Oracle JDK 10 (10.0_1)

 

■前提情報

前提情報としてあげられる記事がこちらです。

blogs.windows.com

 

引用)

April 2018 Update では、今後 新しい元号が発表された際にスムーズに対応できるよう準備をしています。新しい元号となる 2019 年 5 月に先立ち、April 2018 Update では各元号の期間を保持しているレジストリが更新されます。現時点では新しい元号の名称が公表されていないため、変更されるレジストリでは 2019 年 5 月 1 日 以降の年号を「??」と扱います。

[HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Nls\Calendars\Japanese\Eras]
“1868 01 01″=”明治_明_Meiji_M”
“1912 07 30″=”大正_大_Taisho_T”
“1926 12 25″=”昭和_昭_Showa_S”
“1989 01 08″=”平成_平_Heisei_H”
“2019 05 01″=”??_?_??????_?”

 

問題はここ

“2019 05 01″=”??_?_??????_?”

 

あれ?.NETはレジストリ見るとして、Javaはどうなってるんだ?

 

さっそく検証してみました。

 

■検証

ソースコード

github.com

 

 <Java8 出力結果>

( ゚д゚)ウム。。明治は相変わらず変更ないけど、Java8だと新暦対応せず、平成表記のまま

レジストリ見てない?

RuntimeException:西暦1868年1月1日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年1月1日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年1月25日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月7日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月8日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月9日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年10月22日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年10月23日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1872年12月31日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
西暦1873年1月1日 → 明治6年1月1日
西暦1912年1月1日 → 明治45年1月1日
西暦1912年7月29日 → 明治45年7月29日
西暦1912年7月30日 → 大正1年7月30日
西暦1926年1月1日 → 大正15年1月1日
西暦1926年12月24日 → 大正15年12月24日
西暦1926年12月25日 → 昭和1年12月25日
西暦1989年1月1日 → 昭和64年1月1日
西暦1989年1月7日 → 昭和64年1月7日
西暦1989年1月8日 → 平成1年1月8日
西暦2019年4月30日 → 平成31年4月30日
西暦2019年5月1日 → 平成31年5月1日
西暦2019年5月2日 → 平成31年5月2日

 

<Java10 実行結果>

(。´・ω・)? 実行結果変わらず?

レジストリ見てない?

RuntimeException:西暦1868年1月1日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年1月1日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年1月25日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月7日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月8日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年9月9日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年10月22日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1868年10月23日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
RuntimeException:西暦1872年12月31日  (java.time.DateTimeException: JapaneseDate before Meiji 6 is not supported)
西暦1873年1月1日 → 明治6年1月1日
西暦1912年1月1日 → 明治45年1月1日
西暦1912年7月29日 → 明治45年7月29日
西暦1912年7月30日 → 大正1年7月30日
西暦1926年1月1日 → 大正15年1月1日
西暦1926年12月24日 → 大正15年12月24日
西暦1926年12月25日 → 昭和1年12月25日
西暦1989年1月1日 → 昭和64年1月1日
西暦1989年1月7日 → 昭和64年1月7日
西暦1989年1月8日 → 平成1年1月8日
西暦2019年4月30日 → 平成31年4月30日
西暦2019年5月1日 → 平成31年5月1日
西暦2019年5月2日 → 平成31年5月2日

 

どうやら、標準APIの対応はまだで、プロパティファイルか、実行オプションで対応するようですねぇ。

今のところは

<プロパティファイル>

Javaで新元号に対応する

<実行オプション>

Java9 新元号(年号)を追加 – SOFTEMCOM Developers Blog

 

対応されたら困るけど、対応されても困る和暦対応、どうすればよいものか(´ε`;)ウーン…