1.やりたいこと

java.timeパッケージに新しく追加されたYearクラスのインスタンスを、和暦を用いて生成したい

2.躓いたところ

JapaneseDate→LocalDateと似たようなノリでJapaneseEra→Yearが取得できないかなーと考えたところ、JapaneseYearみたいなクラスはないので直接に変換はできないことがわかった。

じゃあ適当に1月1日を経由すればいいんじゃないのかと考えて以下のコードを作成したところ、たまにエラーが生じる。

def createYearWithJapaneseEra(era: JapaneseEra, year: Int): Year
  = Year.from(JapaneseDate.of(era, year, 1, 1))

なぜかと思って確認していみると、平成元年に毎度死んでいることがわかった。平成元年には1月1日が存在しないので、エラーしていたらしい。

3.解決方法

JapaneseChronology使いましょう。

def createYearWithJapaneseEra(era: JapaneseEra, year: Int): Year
  = Year.of(JapaneseChronology.INSTANCE.prolepticYear(era.javaEra, year))

proplepticYearは年数を返してくれるので、これを用いてYearを生成するとほしいものが得られるというわけです。