com.github.msarhan.ummalqura.calendar.DateTimeException:无效的回历月份日期:30

问题描述 投票:0回答:1

我在我的

msarhan
应用程序中使用
 Ummalqura
日历库,当我打开日历并选择第30天并转到另一个月的最后一天29并选择它时,应用程序崩溃
Android
低于例外

com.github.msarhan.ummalqura.calendar.DateTimeException: Invalid Hijrah day of month: 30

 com.github.msarhan.ummalqura.calendar.DateTimeException: Invalid Hijrah day of month: 30
        at com.github.msarhan.ummalqura.calendar.HijrahChronology.getEpochDay(HijrahChronology.java:255)
        at com.github.msarhan.ummalqura.calendar.HijrahChronology.toGregorian(HijrahChronology.java:697)
        at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.set(UmmalquraCalendar.java:259)
        at net.alhazmy13.hijridatepicker.date.hijri.HijriDatePickerDialog.onDayOfMonthSelected(HijriDatePickerDialog.java:991)
        at net.alhazmy13.hijridatepicker.date.hijri.MonthAdapter.onDayTapped(MonthAdapter.java:235)
        at net.alhazmy13.hijridatepicker.date.hijri.MonthAdapter.onDayClick(MonthAdapter.java:224)
        at net.alhazmy13.hijridatepicker.date.hijri.MonthView.onDayClick(MonthView.java:598)
        at net.alhazmy13.hijridatepicker.date.hijri.MonthView.onTouchEvent(MonthView.java:284)
        at android.view.View.dispatchTouchEvent(View.java:14376)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.widget.AbsListView.dispatchTouchEvent(AbsListView.java:6365)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at android.view.ViewGroup.dispatchTransformedTouchEvent(ViewGroup.java:3863)
        at android.view.ViewGroup.dispatchTouchEvent(ViewGroup.java:3551)
        at com.android.internal.policy.DecorView.superDispatchTouchEvent(DecorView.java:733)
        at com.android.internal.policy.PhoneWindow.superDispatchTouchEvent(PhoneWindow.java:1922)
        at android.app.Dialog.dispatchTouchEvent(Dialog.java:1008)
        at com.android.internal.policy.DecorView.dispatchTouchEvent(DecorView.java:691)
        at android.view.View.dispatchPointerEvent(View.java:14644)
        at android.view.ViewRootImpl$ViewPostImeInputStage.processPointerEvent(ViewRootImpl.java:6523)
        at android.view.ViewRootImpl$ViewPostImeInputStage.onProcess(ViewRootImpl.java:6310)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5748)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5801)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5767)
        at android.view.ViewRootImpl$AsyncInputStage.forward(ViewRootImpl.java:5923)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5775)
        at android.view.ViewRootImpl$AsyncInputStage.apply(ViewRootImpl.java:5980)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5748)
        at android.view.ViewRootImpl$InputStage.onDeliverToNext(ViewRootImpl.java:5801)
        at android.view.ViewRootImpl$InputStage.forward(ViewRootImpl.java:5767)
        at android.view.ViewRootImpl$InputStage.apply(ViewRootImpl.java:5775)
        at android.view.ViewRootImpl$InputStage.deliver(ViewRootImpl.java:5748)
        at android.view.ViewRootImpl.deliverInputEvent(ViewRootImpl.java:8907)
        at android.view.ViewRootImpl.doProcessInputEvents(ViewRootImpl.java:8768)
        at android.view.ViewRootImpl.enqueueInputEvent(ViewRootImpl.java:8721)
        at android.view.ViewRootImpl$WindowInputEventReceiver.onInputEvent(ViewRootImpl.java:9043)
        at android.view.InputEventReceiver.dispatchInputEvent(InputEventReceiver.java:194)
        at android.os.MessageQueue.nativePollOnce(Native Method)
        at android.os.MessageQueue.next(MessageQueue.java:336)
        at android.os.Looper.loop(Looper.java:197)

build.gradle

api group: 'com.github.msarhan', name: 'ummalqura-calendar', version:'2.0.2'
implementation 'net.alhazmy13.hijridatepicker:library:3.0.0'

MyActivity


java android kotlin calendar hijri
1个回答
0
投票
这里

注意:

我不是ummalqura日历的专家。但我会尽力解释。 我举一个例子来解释为什么会出现这个问题。

考虑到

=private fun showHijriDatePicker( editText: TextInputEditText, isFromDatePicker: Boolean = false ) { val datePicker = HijriDatePickerDialog.newInstance( { _, year, monthOfYear, dayOfMonth -> when (isFromDatePicker) { true -> { fromDateValue = formatHijriDate(year, monthOfYear, dayOfMonth) } false -> { toDateValue = formatHijriDate(year, monthOfYear, dayOfMonth) } } editText.setText(formatHijriDate(year, monthOfYear, dayOfMonth)) }, ummalquraCalendar.get(UmmalquraCalendar.YEAR), ummalquraCalendar.get(UmmalquraCalendar.MONTH), ummalquraCalendar.get(UmmalquraCalendar.DAY_OF_MONTH) ) }

=1600
那么,这个月就只有

Jumada al-Akhirah(جمادى الآخرة)

天了。但是如果你尝试使用日期

29
,那么你会得到异常:
30

具有正确数据的工作代码示例:

Exception in thread "main" com.github.msarhan.ummalqura.calendar.DateTimeException: Invalid Hijrah day of month: 30 at com.github.msarhan.ummalqura.calendar.HijrahChronology.getEpochDay(HijrahChronology.java:255) at com.github.msarhan.ummalqura.calendar.HijrahChronology.toGregorian(HijrahChronology.java:697) at com.github.msarhan.ummalqura.calendar.UmmalquraCalendar.set(UmmalquraCalendar.java:259) at java.base/java.util.Calendar.set(Calendar.java:1932) at com.example.demo.Example.main(Example.java:39)

输出:

public static void main(String[] args) throws ParseException { UmmalquraCalendar calendar = new UmmalquraCalendar(); calendar.set(1600, Calendar.JUNE, 30); String displayArabic = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, new Locale("ar")) + " " + calendar.get(Calendar.DAY_OF_MONTH) + ", " + calendar.get(Calendar.MONTH); String displayEnglish = calendar.getDisplayName(Calendar.MONTH, Calendar.LONG, Locale.ENGLISH) + " " + calendar.get(Calendar.DAY_OF_MONTH) + ", " + calendar.get(Calendar.MONTH); System.out.println(displayArabic); System.out.println(displayEnglish); }

注意:

如果您不知道日历日期和年份,jar 中有一个名为 hijrah-config.properties 的文件,用于查找正确的月、年和日。此属性定义了 Hijrah 日历变体。 属性文件的样子:

جمادى الآخرة 29, 5 Jumada al-Akhirah 29, 5

希望这有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.