2017-07-05 24 views
1

我一直使用伊历日期时收到错误的Java 8伊历日期错误时月的一天是30

的错误是:

Invalid Hijrah day of month: 30 

代码:

String date = 13820630; 
     HijrahDate hDate= HijrahChronology.INSTANCE.date(Integer.valueOf(date.substring(0, 4)),Integer.valueOf(date.substring(4, 6)), Integer.valueOf(date.substring(6, 8))); 

有任何想法吗?

感谢

+0

为'HijrahChronology'说的意见是可用“的伊历日历具有基于当新月确定在差异几个变种已经发生并且其中观测而成。” - 据推测,班上的逻辑已经确定,那一年的特定月份只有29天。 – khelwood

回答

2

按照HijrahDate班,一个月1372至1306年只有29天。

HijrahDate date = HijrahChronology.INSTANCE.date(1382, 6, 1); 
System.out.println(date.lengthOfMonth()); 

此代码打印29

HijrahChronology的评论说

的伊历日历已经出现基于差异几个变种在当新月决心和其中观测被制成。在某些变体中,每月的长度是从月球和地球的天文数据算法计算的,而在其他月份的长度则由授权观测新月确定。对于基于算法的日历,日历可以投影到未来。对于基于目击的日历,只有过去目击的历史数据可用。

因此,本年表所使用的变体可能与您所期望的不同。

其它变体可以通过Chronology.getAvailableChronologies()

+0

默认情况下,Hijrah年表使用“Hijrah Umm al-Qura”日历,这里是[属性文件](https://github.com/frohoff/jdk8u-dev-jdk/blob/master/src/share/lib /hijrah-config-umalqura.properties),它似乎指导特定年表的工作原理。正如你所看到的,1382年的月份“只有29天在那个属性文件中(不是棘手,只是增加了来自哪里的东西)。 –

相关问题