java.time.DateTimeException:Hijrah日期超出范围
今天我发现了Java的8个Hijrah日期,我正在尝试将Hijri日期转换为公历日期;我一直收到这个错误: java.time.DateTimeException:Hijrah日期超出范围java.time.DateTimeException:Hijrah日期超出范围,java,Java,今天我发现了Java的8个Hijrah日期,我正在尝试将Hijri日期转换为公历日期;我一直收到这个错误: java.time.DateTimeException:Hijrah日期超出范围 String repayDate = date.substring(0, 4)+"-"+date.substring(4, 6)+"-"+date.substring(6, 8); DateFormat dateFormat = new SimpleDateFormat("yyyy-M
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() ;
日期的内容为:1400-01-01
谢谢根本不需要使用
日期格式
和日历
——如果可以使用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());
根本不需要使用
日期格式
和日历
——如果可以使用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());
您可以手动解析输入日期,然后根据它创建一个Hijrah日期,并将其转换为如下所示的公历
public static LocalDate hijrahToGregorian(String input){
int year = Integer.parseInt(input.substring(0,4));
int month = Integer.parseInt(input.substring(4,6));
int day = Integer.parseInt(input.substring(6,8));
HijrahDate hijrah = HijrahDate.of(year, month, day);
return IsoChronology.INSTANCE.date(hijrah);
}
您可以手动解析输入日期,然后根据它创建一个Hijrah日期,并将其转换为如下所示的公历
public static LocalDate hijrahToGregorian(String input){
int year = Integer.parseInt(input.substring(0,4));
int month = Integer.parseInt(input.substring(4,6));
int day = Integer.parseInt(input.substring(6,8));
HijrahDate hijrah = HijrahDate.of(year, month, day);
return IsoChronology.INSTANCE.date(hijrah);
}
为什么要使用日期格式和日历呢
LocalDate.parse(returndate)
可以很好地工作。date
的内容是什么?date的内容是:1400-01-01所以您试图将Gregorian 1400 CE转换为Hijra?或者试图将希吉拉1穆哈拉姆1400 AH转换为格里高利?这真的是日期的内容吗?它应该是14000101
。为什么要使用日期格式和日历LocalDate.parse(returndate)
可以很好地工作。date
的内容是什么?date的内容是:1400-01-01所以您试图将Gregorian 1400 CE转换为Hijra?或者试图将希吉拉1穆哈拉姆1400 AH转换为格里高利?这真的是日期的内容吗?这应该是14000101
“您可以手动解析输入日期”相当危险,因为OP甚至不知道如何正确设置其输入的字符串的格式。他会用他现有的“1400-01-01”来尝试你的方法,这对你的代码来说不太好。@Tom true,但如果你不知道输入日期格式是什么,那么没有其他方法会更好。你可以验证它或期望其他方法,比如三个int参数。当然,但这超出了问题的范围。OP想知道如何进行转换。你的答案仍然可以告诉他你期望的字符串格式(我知道与OPs代码相同,但他已经使用了不正确的格式)。“你可以手动解析输入日期”非常危险,因为OP甚至不知道如何正确格式化他的输入字符串。他会用他现有的“1400-01-01”来尝试你的方法,这对你的代码来说不太好。@Tom true,但如果你不知道输入日期格式是什么,那么没有其他方法会更好。你可以验证它或期望其他方法,比如三个int参数。当然,但这超出了问题的范围。OP想知道如何进行转换。你的答案仍然可以告诉他你期望的字符串格式(与OPs代码相同,我知道,但他已经使用了不正确的格式)。这是正确的方法。我的答案不如这个。这是正确的方法。我的回答不如这个。