gpt4 book ai didi

java - 无法获得正确的当前伊斯兰日期

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:20:32 30 4
gpt4 key购买 nike

我正在使用 joda 时间来获取 沙特阿拉伯 的当前伊斯兰日期,如他们的网站所示:

DateTime dtISO = new DateTime(2014, 1, 9, 0, 0, 0, 0);
DateTime dtIslamic = dtISO.withChronology(IslamicChronology.getInstance());

上面打印的日子比实际的日子少,它打印今天是 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));

但它给出了相同的结果。

最佳答案

首先,我尝试了 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);

根据 islamicfinder.org 网站,日期确实应该是:

Thursday 8 Raby` al-awal 1435 A.H.

或参见:http://www.ummulqura.org.sa/

我们必须在这里记住,Joda Time 仅支持基于使用特殊闰年模式的算法计算的伊斯兰历。总而言之,我知道 8 种这样的模式。 Joda Time 定义了其中四个。 Joda Time 不支持的是沙特阿拉伯的官方日历,即 Umalqura 日历,它是一种基于目击的日历。因此,作为总结,我们可以说:使用 Joda Time 不是沙特阿拉伯的选择。现在该怎么办?

一种选择是使用 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"

关于java - 无法获得正确的当前伊斯兰日期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21023907/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com