调用了一些外部系统,该系统返回回历中的日期。在生产环境中,我们将其接收为'30-02-1436'
.
考虑将回历转换为公历日期的片段,但它没有这样做。
public static String convertHijriToGregorianDate(String hijriDate){
Chronology iso = ISOChronology.getInstanceUTC(); // get the ISO standard chronology which we follow now
Chronology hijri = IslamicChronology.getInstanceUTC(); // the hijri based chronology
//String hijriDate = "19-08-1435"; // example/format which is received as a parameter in the method from response
if(null != hijriDate && !hijriDate.isEmpty()){
String[] parts = hijriDate.trim().split("-"); // you will get an array of size 3 by splitting with regex '-'
String hijriYear = parts[2];
String hijriMonth = parts[1];
String hijriDay = parts[0];
// Construct the Local Date corresponding to the hijri chronology
LocalDate todayHijri = new LocalDate(Integer.parseInt(hijriYear), Integer.parseInt(hijriMonth), Integer.parseInt(hijriDay), hijri);
// Construct the Local Date corresponding to the iso chronology based on the hijri date
LocalDate todayIso = new LocalDate(todayHijri.toDateTimeAtStartOfDay(), iso);
return String.valueOf(todayIso);
}
return null;
}
请建议代码有什么问题。我们在stacktrace中遇到了这个问题-
org.joda.time.IllegalFieldValueException:dayOfMonth 的值 30 必须在 org.joda.time.field.FieldUtils.verifyValueBounds(FieldUtils.java:252) 的 org.joda.time.chrono 的范围 [1,29] 内。 BasicChronology.getDateMidnightMillis(BasicChronology.java:632) at org.joda.time.chrono.BasicChronology.getDateTimeMillis0(BasicChronology.java:186) at org.joda.time.chrono.BasicChronology.getDateTimeMillis(BasicChronology.java:160) at org .joda.time.chrono.LimitChronology.getDateTimeMillis(LimitChronology.java:177) 在 org.joda.time.chrono.BasicChronology.getDateTimeMillis(BasicChronology.java:155) 在 org.joda.time.LocalDate.(LocalDate.java: 457)
使用的 Joda 时间版本是2.9.1