gpt4 book ai didi

java : How to add days to Hijri date?

转载 作者:行者123 更新时间:2023-11-30 05:55:54 25 4
gpt4 key购买 nike

使用 Joda 我写:

public static String adjustHijri(String dateHijri, int plusDays) {

// dateHijri formatted as yyyy-MM-dd, eg: 1440-02-30
int yearHijri = Integer.parseInt(dateHijri.substring(0, 4));
int monthHijri = Integer.parseInt(dateHijri.substring(5, 7));
int dayHijri = Integer.parseInt(dateHijri.substring(8));

DateTime date = new DateTime(yearHijri, monthHijri, dayHijri, 0, 0, IslamicChronology.getInstance());
return date.plusDays(plusDays).toString("yyyy-MM-dd");
}

对于 dateHijri=1440-02-30 我得到:

org.joda.time.IllegalFieldValueException: Value 30 for dayOfMonth must be in the range [1,29]

最佳答案

您真正的问题是没有考虑过您需要哪种伊斯兰日历变体。

回历 1440 年第二个月有 30 天的预期仅适用于沙特阿拉伯的 Umalqura 日历,但不适用于 Joda-Time 使用的变体。该库仅支持四种算法变体,请参阅 API 中的 IslamicChronology.LeapYearPatternType 常量的定义。 。您的代码隐式使用 LEAP_YEAR_16_BASED 变体。如果其他三个变体符合您的期望(未经我测试),您可以尝试它们,但结果也可能是没有一个 Joda-Time 变体匹配。如果是这样,那么您对 ​​Joda-Time 完全不走运,可能需要使用另一个库。

既然您已经用“android-jodatime”标记了您的问题,我假设并推测您需要对 Android 上的 umalqura 日历的支持。如果是这样,那么您可能会考虑像 msarhan 这样的第三方库或Time4A (我的库)。 Time4A 中的示例:

static final ChronoFormatter<HijriCalendar> HIJRI_FORMAT =
ChronoFormatter
.ofPattern("yyyy-MM-dd", PatternType.CLDR, Locale.ROOT, HijriCalendar.family())
.withCalendarVariant(HijriCalendar.VARIANT_UMALQURA);
public String addDays(String date, int days) throws ParseException {
HijriCalendar hcal = HIJRI_FORMAT.parse(date).plus(CalendarDays.of(days));
return HIJRI_FORMAT.format(hcal);
}

如果您只使用 Android 26 或更高版本的 API 级别,那么您也可以尝试新的 java.time.chrono.HijrahDate-class,它也支持 umalqura-calendar,但我认为这个API级别仍然排除了太多的Android用户。不幸的是, Threeten-backport(例如 Jake Whartons ThreetenABP-library)不支持 umalqura 日历。

关于java : How to add days to Hijri date?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53202798/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com