我正在使用joda时间在沙特阿拉伯获得当前的伊斯兰日期,如同他们的网站:
DateTime dtISO = new DateTime(2014, 1, 9, 0, 0, 0, 0);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance());
Run Code Online (Sandbox Code Playgroud)
上面打印的日期少于实际日期,它打印今天是7但实际是8.请告知.
更新:
我甚至用时区尝试了如下:
DateTimeZone SAUDI_ARABIA = DateTimeZone.forID("Asia/Riyadh");
DateTime dtISO = new DateTime(2014, 1, 9, 0, 0, 0, 0);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance(SAUDI_ARABIA));
Run Code Online (Sandbox Code Playgroud)
但它给出了相同的结果.
首先,我尝试了 JodaTime 的“闰年模式”。所有四个定义的模式都会产生相同的结果,即日期“Hijrah 1435-03-07”。这是我的测试代码:
DateTime dtISO = new DateTime(2014, 1, 9, 0, 0, 0, 0);
DateTimeZone tzSAUDI_ARABIA = DateTimeZone.forID("Asia/Riyadh");
DateTime dtIslamic =
dtISO.withChronology(
IslamicChronology.getInstance(
tzSAUDI_ARABIA,
IslamicChronology.LEAP_YEAR_15_BASED));
System.out.println(dtIslamic);
Run Code Online (Sandbox Code Playgroud)
根据 islamicfinder.org 网站,日期确实应该是:
星期四 8 Raby` al-awal 伊斯兰历 1435
或者参见: http: //www.ummulqura.org.sa/
我们必须记住,Joda Time 仅支持基于使用特殊闰年模式的算法计算的伊斯兰日历。我总共知道 8 种这样的模式。Joda Time 定义了其中四个。Joda Time 不支持沙特阿拉伯的官方日历,即 Umalqura 日历,这是一种基于目击的日历。因此,作为总结,我们可以说:使用乔达时间对于沙特阿拉伯来说不是选择。现在做什么?
一种选择是使用com.ibm.icu.util.IslamicCalendar@PopoFibo 提到的。另一个选项当前是等待 Java 8,其中包含 Umalqura 日历,这与 IBM 版本不同。详细信息:虽然 IBM 版本仍然基于计算(“天文”(不是真正的)或“民用”),但该类java.time.chrono.HijrahDate使用后台查找表,其中包含沙特阿拉伯机构 KACST 提供的数据。我会比 IBM 版本更信任这个版本,因为对于其他日期 IBM(这里是其库 ICU4J)不一定是正确的。所以在 Java 8 中你可以使用:
HijrahDate hdate =
HijrahChronology.INSTANCE.date(LocalDate.of(2014, Month.JANUARY, 9));
System.out.println(hdate); // Output: "Hijrah-umalqura AH 1435-03-08"
Run Code Online (Sandbox Code Playgroud)