1

我从用户那里取了一个年份。如何将其转换为回历年数?最好不要使用 jodatime,而是使用 time4j 或 java 8。

示例:我需要从 2016 年开始获得回历年份编号。

我找到了这篇文章,Android 中有波斯语(Shamsi 或 Jalali)日历的库或算法吗?

System.out.println(jalali.transform(PlainDate.class)); // 2015-03-25

但是方法转换不起作用。

我还发现这篇文章将回历转换为公历: Get a gregorian date from Hijri date strings

但我需要从公历到回历。

4

1 回答 1

2

句子“但是方法转换不起作用”。可能应该阅读“不编译”。

原因是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
于 2016-04-30T13:10:31.753 回答