You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MaterialCalendarView获取MONTH、YEAR等日期字段值异常问题

问题原因与修复方案

你遇到的问题是典型的混淆了Calendar类的静态常量和实例字段值,这是新手使用Java Calendar类时很容易踩的坑,我来给你拆解清楚:

错误根源

Java的Calendar类里,MONTH、YEAR、DAY_OF_MONTH这些都是静态常量——它们的作用是作为参数传递给get()方法,用来指定你要获取的日期字段类型,而不是直接存储当前Calendar实例的日期值。

举个直观的例子:

  • Calendar.MONTH的实际固定值是2(这是月份字段的索引标识),不是当前实例的真实月份
  • Calendar.YEAR的实际固定值是1
  • Calendar.DAY_OF_MONTH的实际固定值是5

你直接调用calendar.MONTH拿到的就是这些固定常量值,自然和日志里显示的Calendar实例的真实日期完全不符。

修复后的代码

把所有直接访问静态常量的地方,改成调用Calendar.get(int field)方法,传入对应的静态常量作为参数,就能拿到真实的日期值了:

calendarView = (CalendarView) view.findViewById(R.id.calendarView);
calendarView.setOnPreviousButtonClickListener(new OnNavigationButtonClickListener() {
    @Override
    public void onClick() {
        Calendar calendar = calendarView.getCurrentPageDate();
        // 用get方法获取实际月份和年份,注意Calendar月份从0开始,要+1才是常规的1-12月
        int previousMonth = calendar.get(Calendar.MONTH) + 1;
        int previousYear = calendar.get(Calendar.YEAR);
        Log.i(TAG, "--- previous month: " + previousMonth + "/" + previousYear + " - " + calendar);
    }
});
calendarView.setOnForwardButtonClickListener(new OnNavigationButtonClickListener() {
    @Override
    public void onClick() {
        Calendar calendar = calendarView.getCurrentPageDate();
        int nextMonth = calendar.get(Calendar.MONTH) + 1;
        int nextYear = calendar.get(Calendar.YEAR);
        Log.i(TAG, "--- next month: " + nextMonth + "/" + nextYear + " - " + calendar);
    }
});
calendarView.setOnDayClickListener(new OnDayClickListener() {
    @Override
    public void onDayClick(EventDay eventDay) {
        Calendar clickedDayCalendar = eventDay.getCalendar();
        // 用get方法获取实际的日期数值
        int clickedDay = clickedDayCalendar.get(Calendar.DAY_OF_MONTH);
        Log.i(TAG, "------- clicked day: " + clickedDay + " - " + clickedDayCalendar);
    }
});

额外提示

别忘了Calendar的月份是从0开始计数的(0代表1月,11代表12月),所以如果你要给用户展示常规的1-12月,记得在获取到的月份值上加1,就像上面代码里做的那样。

内容的提问来源于stack exchange,提问作者codeinprogress

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 07:32:32