「しかし、メソッド変換は機能しません」という文。おそらく「コンパイルされない」と読むべきです。
その理由は、HijriCalendar
がさまざまな亜種 (Umalqura など) のファミリーを表しているからです。CalendarVariant
技術的背景: このクラスはの代わりに を継承していCalendrical
ます。したがって、コンパイラは、2 つの引数transform()
を指定して-methodを使用することを強制します。2 番目の引数は、 のバリアントを指定します。例:HijriCalendar
PlainDate today = SystemClock.inLocalView().today();
HijriCalendar umalqura =
today.transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA);
HijriCalendar westIslamicCivil =
today.transform(HijriCalendar.class, HijriAlgorithm.WEST_ISLAMIC_CIVIL);
System.out.println(umalqura); // AH-1437-07-23[islamic-umalqura]
System.out.println(westIslamicCivil); // AH-1437-07-22[islamic-civil]
この例は、バリアントを指定することが重要である理由も示しています。(同じグレゴリオ暦の日付に対して) 1 日の違いがわかります。実際、Time4J は 11 のバリアントをサポートしています。umalquara バリアントはサウジアラビアの公式カレンダーですが、8 つのアルゴリズムバリアントは概算として解釈され、より広い有効範囲を持つ必要があります。
インスタンスをHijriCalendar
取得したら、簡単にイスラム暦を取得できます。
int hijriYear = umalqura.getYear();
System.out.println("Year (hirji-umalqura): " + hijriYear); // 1437