句子“但是方法转换不起作用”。可能应该阅读“不编译”。
原因是HijriCalendar
代表一系列不同的变体(例如 Umalqura)。技术背景:这个类继承自CalendarVariant
而不是Calendrical
. 因此,编译器会强制您使用transform()
带有两个参数的 - 方法。第二个参数指定 的变体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]
此示例还说明了为什么指定变体很重要。您会看到一天的差异(对于同一个公历日期)!实际上 Time4J 支持 11 种变体。umalquara 变体是沙特阿拉伯的官方日历,而 8 种算法变体应该被解释为近似值并具有更广泛的有效性范围。
一旦你有了一个实例,HijriCalendar
你就可以很容易地得到回历年:
int hijriYear = umalqura.getYear();
System.out.println("Year (hirji-umalqura): " + hijriYear); // 1437