首页 文章

Calendar在CalendarCalendarView中返回错误的MONTH,YEAR和DAY_OF_MONTH

提问于
浏览
0

我正在使用MaterialCalendarView作为我的应用日历 . 我想阅读用户点击日历上的下一个/上一个的月份和年份 . 这是我的代码:

calendarView = (CalendarView) view.findViewById(R.id.calendarView);
calendarView.setOnPreviousButtonClickListener(new OnNavigationButtonClickListener() {
           @Override
           public void onClick() {
               Calendar calendar = calendarView.getCurrentPageDate();
               int previousMonth = calendar.MONTH;
               int previousYear = 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.MONTH;
               int nextYear = calendar.YEAR;
               Log.i(TAG, "--- next month: " + nextMonth + "/" + nextYear +  " - " + calendar);
           }
       });

但是,当我单击下一个/上一个箭头时,返回给我的MONTH和YEAR值不正确 . 例如,在这个例子中它的JAN 20188.上个月应该是11,年应该是2017年,下个月应该是1和2018年 .

但是,对于之前单击日志,我看到:

I / CalendarFragment:---上个月:2/1 - java.util.GregorianCalendar [time =?,areFieldsSet = false,areAllFieldsSet = true,lenient = true,zone = java.util.SimpleTimeZone [id = GMT,offset = 0,dstSavings = 3600000,useDaylight =假,startYear = 0,STARTMODE = 0,startMonth = 0,朝九特派= 0,startDayOfWeek = 0,开始时间= 0,startTimeMode = 0,endMode = 0,endMonth = 0,endday指定= 0 ,一个endDayOfWeek = 0,结束时间= 0,endTimeMode = 0],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2017,月= 11,WEEK_OF_YEAR = 1,WEEK_OF_MONTH = 1,DAY_OF_MONTH = 1,DAY_OF_YEAR = 1, DAY_OF_WEEK = 3,DAY_OF_WEEK_IN_MONTH = 1,AM_PM = 0,HOUR = 0,HOUR_OF_DAY = 0,MINUTE = 0,SECOND = 0,微差= 0,ZONE_OFFSET = 0,DST_OFFSET = 0]

下次点击我看到:

I / CalendarFragment:---下个月:2/1 - java.util.GregorianCalendar [time =?,areFieldsSet = false,areAllFieldsSet = true,lenient = true,zone = java.util.SimpleTimeZone [id = GMT,offset = 0,dstSavings = 3600000,useDaylight =假,startYear = 0,STARTMODE = 0,startMonth = 0,朝九特派= 0,startDayOfWeek = 0,开始时间= 0,startTimeMode = 0,endMode = 0,endMonth = 0,endday指定= 0 ,一个endDayOfWeek = 0,结束时间= 0,endTimeMode = 0],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2018,月= 1,WEEK_OF_YEAR = 1,WEEK_OF_MONTH = 1,DAY_OF_MONTH = 1,DAY_OF_YEAR = 1, DAY_OF_WEEK = 3,DAY_OF_WEEK_IN_MONTH = 1,AM_PM = 0,HOUR = 0,HOUR_OF_DAY = 0,MINUTE = 0,SECOND = 0,微差= 0,ZONE_OFFSET = 0,DST_OFFSET = 0]

如果看到日志,则日历实例值的确具有MONTH和YEAR . 但是当我在外面访问它时返回2和1.为什么?

当我执行setOnDayClickListener()时,会发生同样的事情

calendarView.setOnDayClickListener(new OnDayClickListener() {
            @Override
            public void onDayClick(EventDay eventDay) {
                Calendar clickedDayCalendar = eventDay.getCalendar();
                Log.i(TAG, "------- clicked day: " + clickedDayCalendar.DAY_OF_MONTH + " - " + clickedDayCalendar);

            }
        });

无论我在1月点击哪一天,它给我点击了一天为5.这是日志:

I / CalendarFragment:-------点击日:5 - java.util.GregorianCalendar [time =?,areFieldsSet = false,areAllFieldsSet = true,lenient = true,zone = java.util.SimpleTimeZone [id = GMT ,偏移= 0,dstSavings = 3600000,useDaylight =假,startYear = 0,STARTMODE = 0,startMonth = 0,朝九特派= 0,startDayOfWeek = 0,开始时间= 0,startTimeMode = 0,endMode = 0,endMonth = 0,endday指定= 0,一个endDayOfWeek = 0,结束时间= 0,endTimeMode = 0],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2018,MONTH = 0,WEEK_OF_YEAR = 2,WEEK_OF_MONTH = 2,DAY_OF_MONTH = 12,DAY_OF_YEAR = 12,DAY_OF_WEEK = 6,DAY_OF_WEEK_IN_MONTH = 2,AM_PM = 0,HOUR = 10,HOUR_OF_DAY = 0,MINUTE = 0,SECOND = 0,MILLISECOND = 0,ZONE_OFFSET = 0,DST_OFFSET = 0] I / CalendarFragment:---- ---点击日:5 - java.util.GregorianCalendar [time =?,areFieldsSet = false,areAllFieldsSet = true,lenient = true,zone = java.util.SimpleTimeZone [id = GMT,offset = 0,dstSavings = 3600000, useDaylight =假,startYear = 0,STARTMODE = 0,startMonth = 0,朝九特派= 0,startDayOfWeek = 0,开始时间= 0,startTimeMode = 0,endMode = 0,endMonth = 0,endday指定= 0,一个endDayOfWeek = 0,结束时间= 0, endTimeMode = 0],Firstdayofweek可= 1,minimalDaysInFirstWeek = 1,ERA = 1,YEAR = 2018,MONTH = 0,WEEK_OF_YEAR = 3,WEEK_OF_MONTH = 3,DAY_OF_MONTH = 20,DAY_OF_YEAR = 20,DAY_OF_WEEK = 7,DAY_OF_WEEK_IN_MONTH = 3,AM_PM = 1,HOUR = 3,HOUR_OF_DAY = 0,MINUTE = 0,SECOND = 0,微差= 0,ZONE_OFFSET = 0,DST_OFFSET = 0]

知道为什么会这样吗?或者是什么导致了它?

1 回答

  • 0

    MONTH和YEAR是public static int vars . 所以用Calendar类访问它们 .

    Calendar calendar = calendarView.getCurrentPageDate();
     int previousMonth = calendar.get(Calendar.MONTH) + 1;
     int previousYear = calendar.get(Calendar.YEAR);
     Log.i(TAG, "--- previous month: " + previousMonth + "/"  + previousYear);
    

相关问题