我在我的
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
我不是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
希望这有帮助。