Joda api没有返回正确的伊斯兰日期

时间:2015-06-10 13:53:01

标签: java jodatime

我正在将格里高利日期转换为伊斯兰日期。我将其闰年模式设置为印度闰年,但它无效。

我为循环和格里高利日期制作当前月份和计数是天并将其转换为伊斯兰日期。 What i want

这是我的代码

        for(int i=0;i<maxDay;i++)
        {
            eng.add(String.valueOf(i+1));
            DateTime dtISO=new DateTime(currentY,currentMonth+1,i+1,0,0);
            DateTimeZone asia= DateTimeZone.forID("Asia/Riyadh");

            DateTime dtIslamic = dtISO.withChronology(
                    IslamicChronology.getInstance(
                              asia, 
                              IslamicChronology.LEAP_YEAR_INDIAN));
            String islamicDateArr="";
            split=dtIslamic.toString().split("T");
            split=split[0].split("-");
            if(i==0 || Integer.parseInt(split[2])==1)
            {
                isl.add(String.valueOf(split[2]+" "+islamicMonths[Integer.parseInt(split[1])-1]));
                continue;
            }
            isl.add(String.valueOf(split[2]));
        }

1 个答案:

答案 0 :(得分:1)

您的代码似乎是正确的。

既然你告诉我已经尝试了Joda-Time的四个闰年模式中的每一个都没有成功,我感觉可能有一个错误或只是一个缺失的功能,因为在所有支持的闰年模式中应该有一对一天不同的模式(你观察到一天的差异)。

其他人已经提交了错误问题。见这里:

issue 163

issue 107

正如您所看到的,您很难说服项目负责人为您解决问题。也许他说Joda-Time没有错误,但是没有完成时是对的。

请记住,根据R.H. van Gent计算的伊斯兰日历算法至少知道 8而不是4个变种,因为有4种插入方案和(对于每种方案)两种变化取决于伊斯兰时代的精确开始(周四与周五时代)。所以Joda-Time并不支持所有变种。

Joda-Time有哪些替代方案?

a)Java-8及其backport Threeten-BP(对于Java-6 + 7)支持桌面驱动的沙特阿拉伯Umalqura日历(基于瞄准)。我不确定这是否能解决您的问题(如果没有,那么您可能会提供一个手写文件,其中包含与您相关的表格数据 - 很多工作)。请注意,这两个库都不支持基于算法的伊斯兰日历。

b)有些人已经编写了自己的本土解决方案。我通过Google找到了此hijri converter。不知道这是否适合你。

c)IBM在其ICU项目中提供Hijri calendar。它提供与Joda-Time不同的闰年模式。也许有帮助。

附注:正如您所看到的,当前对Hijri日历的Java支持并不令人满意。这就是为什么我决定在我自己的库Time4J中设置一个新的实现。预计可能在2015年秋季后2-3个月。