java.time.DateTimeException: Hijrah 日期超出范围

use*_*012 1 java

今天我发现了 Java 的 8 Hijrah Date,我正在尝试从 Hijri 日期转换为 gregorian 日期;我一直收到这个错误:

java.time.DateTimeException: Hijrah 日期超出范围

    String repayDate = date.substring(0, 4)+"-"+date.substring(4, 6)+"-"+date.substring(6, 8);
        DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
        Date inputDate = dateFormat.parse(repayDate);
        Calendar cl=Calendar.getInstance();
        cl.setTime(inputDate);


        HijrahDate hDate=    HijrahChronology.INSTANCE.date(LocalDate.of(cl.get(1),cl.get(Calendar.MONTH)+1, cl.get(Calendar.DATE))); 


        return IsoChronology.INSTANCE.date(hDate).toString() ;
Run Code Online (Sandbox Code Playgroud)

日期内容为:1400-01-01

谢谢

ass*_*ias 5

根本不需要使用 aDateFormat和 a Calendar- 如果您可以使用 Java 时间 API,您应该避免使用旧版 API。

这是一个与您的输入“有效”的简单示例:

String date = "14000101";

TemporalAccessor ta = DateTimeFormatter.ofPattern("uuuuMMdd")
                                       .withChronology(HijrahChronology.INSTANCE)
                                       .parse(date);
HijrahDate hDate = HijrahDate.from(ta);

System.out.println("hDate = " + hDate);
System.out.println("Gregorian date = " + IsoChronology.INSTANCE.date(hDate).toString());
Run Code Online (Sandbox Code Playgroud)