我正在使用gitHub的“材料日历”视图。现在,我在日历视图中执行按月更改监听器。当我更改月份时,它将显示上个月。例如,11月显示10月,而2月显示1月。此外,当我更改为一月或十二月时,将出现以下错误:
org.threeten.bp.DateTimeException: Invalid value for MonthOfYear: 0
我的代码是
materialCalendarView.setOnMonthChangedListener(new OnMonthChangedListener() {
@Override
public void onMonthChanged(MaterialCalendarView widget, CalendarDay date) {
Month month = Month.of(date.getMonth());
weekoffs.setText(month.toString());
}
});
我该如何解决这个问题?
答案 0 :(得分:1)
Zahoor Saleem和TheWanderer的评论中已经提到了它,但是它应该是一个答案:您从CalendarDay
获得的月份数字是“基于0的”,即1月份为0。等等,直到12月11日为止。因此,例如,如果您选择10月的某个日期,您将得到9,Month
很自然地理解为9月。如您所见,一个月前。
简单的解决方案是添加1:
// getMonth() is 0-based, so add 1
Month month = Month.of(date.getMonth() + 1);
不是很好。如果您愿意,可以选择一种替代方法:
// getMonth() is 0-based, so use as index into the (0-based) array of Months
Month month = Month.values()[date.getMonth()];