2019年4月にリリースされた、Oracle JDK 7u221, 8u211, 11.0.3以降で新しい元号に関する更新が施されています。しかしながら、Oracle JDK 6以前のJava SEバージョンはEOL (End Of Life)を迎えているため、今後、新元号に対応するための更新が実施される予定はありません。
現在、Oracle JDK 7u221, 8u211, 11.0.3より前のJava SEバージョンを利用されている場合、java.utilパッケージのDateクラスやCalendarクラス、あるいはDate and Time APIを使用して和暦元号を出力していると影響があります。
例えば、JDK 8でjava.util.Calendarクラスを利用していた場合、下記のような処理で問題が発生します。
- 和暦が含まれる日付の出力
public static void printDate() {
Calendar cal = Calendar.getInstance();
cal.set(2019, Calendar.MAY, 1, 0, 0, 0);
Date date = cal.getTime();
Locale locale = new Locale("ja", "JP", "JP");
DateFormat wareki = new SimpleDateFormat("GGGGyyyy年M月d日", locale);
//令和元年5月1日と出力されることを期待しているが、平成31年5月1日が出力される。
System.out.println(wareki.format(date));
}
- 和暦が含まれる日付の解析処理
public static void parseDate() throws ParseException {
String date = "令和元年5月1日";
Locale locale = new Locale("ja", "JP", "JP");
DateFormat wareki = new SimpleDateFormat("GGGGyyyy年M月d日", locale);
//令和元年を解析できず、ParseExceptionが発生する。
System.out.println(wareki.parse(date));
}
この場合、Oracle社とJava SE Subscriptionの有償サポートを契約した後、利用しているJava SEをOracle JDK 7u221, 8u211, 11.0.3以降にアップデートすることをご検討ください。