2016-09-21 119 views

回答

0

關於您的轉換示例,在我看來,您正在尋找Hijri日曆的Umalqura變體,這是沙特阿拉伯的官方日曆。

您發佈的SO-link指的是Joda-Time。該庫不支持umalqura,但Hijri日曆的四種算法變體(僅適用於近似)。我測試了所有四種支持的變體。沒有什麼是你的。

Chronology iso = ISOChronology.getInstanceUTC(); 
Chronology hijri = 
    IslamicChronology.getInstance(DateTimeZone.UTC, IslamicChronology.LEAP_YEAR_INDIAN); 
LocalDate todayIso = new LocalDate(2016, 9, 20, iso); 
LocalDate todayHijri = new LocalDate(todayIso.toDateTimeAtStartOfDay(), hijri); 
System.out.println("joda=" + todayHijri); 
// LEAP_YEAR_15_BASED => 1437-12-16 
// LEAP_YEAR_16_BASED => 1437-12-16 
// LEAP_YEAR_HABASH_AL_HASIB => 1437-12-17 
// LEAP_YEAR_INDIAN => 1437-12-17 

如果您在Java的8 -platform操作,那麼您可以採用如下方案。但是,如果您是在Android和嘗試使用反向移植ThreetenABP那麼就會失敗,因爲它的實現從Java-8偏差:

HijrahDate hd = HijrahDate.from(LocalDate.of(2016, 9, 20)); 
System.out.println("java.time=" + hd); // Hijrah-umalqura AH 1437-12-19 

如果你想要像其他變體或一天的變量開始更多的日曆功能(伊斯蘭日子從日落開始!)或者如果您在Android上運行,那麼您可以使用我的庫Time4J/A。該HijriCalendar of Time4J(或Time4A在Android)得到你想要的東西:

System.out.println(
    PlainDate.of(2016, 9, 20) 
    .transform(HijriCalendar.class, HijriCalendar.VARIANT_UMALQURA)); 
// AH-1437-12-19[islamic-umalqura] 

注意最後一個例子是在中午時有效轉換。當使用黃昏作爲一天的開始時,請諮詢javadoc如何做到這一點。

從2016年9月7日更新:Android上非常不同的API

其他可能umalqura解決方案包括

+0

謝謝,這對我非常有幫助。 –

+1

另外,我在這裏找到了一個偉大的Umalqura日曆庫[link](https://github.com/msarhan/ummalqura-calendar) –