写一个函数判断一个日期是否在本月之内,自己百度然后写了一个,但是有挺多细节问题

import java.text.DateFormatSymbols;
import java.text.SimpleDateFormat;
import java.util.*;

/**

  • 写一个函数判断一个日期是否在本月之内
    */
    public class DateTest {
    public static void main(String[] args) {

    DateTest dt = new DateTest();
    
    GregorianCalendar now = new GregorianCalendar();        //构造一个日历对象
    
    /*判断当前时区的第一天是否为周日*/
    boolean isFirstSunday = (now.getFirstDayOfWeek() == Calendar.SUNDAY);
    //System.out.println("当前时区一星期的第一天是否为周日:"+isFirstSunday);
    
    int month = now.get(Calendar.MONTH);            //month为获取当前的月
    int today = now.get(Calendar.DAY_OF_MONTH);     //today为获取当前的日
    //System.out.println("现在是"+(month+1)+"月的第"+today+"天");
    
    now.set(Calendar.DAY_OF_MONTH,1);               //将now设置为本月1号
    
    int week = now.get(Calendar.DAY_OF_WEEK);       //获取周几,并赋值给week
    //System.out.println("现在是星期"+(week-1));           //若一周第一天为星期天,则-1
    
    int firstDayOfWeek = now.getFirstDayOfWeek();   //firstDayOfWeek为获取本地区的起始日
    //System.out.println("当前区域一星期的第一天是星期日");
    
    /*进行缩进,将日历对象的日减一,知道一个星期的第一天位置*/
    int intent = 0;                         //记录缩进几次
    while(firstDayOfWeek != week)                   //当当前时区一星期的第一天不等于今天时,执行以下循环
    {                                               
        ++intent;
        //System.out.println("intent="+intent);
        now.add(Calendar.DAY_OF_MONTH, -1);         //当前日期提前一天
    
        week = now.get(Calendar.DAY_OF_WEEK);       //获取当前日期为星期几        
        //System.out.println("现在是星期"+week+"..");
    }
    
    /*打印星期缩写字符串*/
    String[] weekdayNames = new DateFormatSymbols().getShortWeekdays();//输出表示星期的方式为缩写
    do{
        System.out.printf("%4s",weekdayNames[week]);
        now.add(Calendar.DAY_OF_MONTH, 1);              //日期增1移动
        week = now.get(Calendar.DAY_OF_WEEK);           //获取当前日期为星期几
        }while(week != firstDayOfWeek);
            System.out.println();
    
        /*本月1号前的日期补位空格*/
        for(int i = 0;i < intent;++i){
            System.out.print("    ");
            }
    
        /*进行打印日期,当日日期后用*注释,直到d进入下一个月停止打印*/
        now.set(Calendar.DAY_OF_MONTH, 1);          //将now设置为本月1号
        week = now.get(Calendar.DAY_OF_WEEK);
        int day = now.get(Calendar.DAY_OF_MONTH);
        do{
            System.out.printf("%3s",day);
            if(today == day){
                System.out.print("*");
            }else{
                    System.out.print(" ");
                }
            now.add(Calendar.DAY_OF_MONTH, 1);
            week = now.get(Calendar.DAY_OF_WEEK);
            day = now.get(Calendar.DAY_OF_MONTH);
    
            if(week == firstDayOfWeek){         //weekday为星期的第一天则换行打印           
            System.out.println();
            }
        }while(month == now.get(Calendar.MONTH));
        if(week != firstDayOfWeek){
        System.out.println();
        }
    
        /*
         * 获得用户输入
         */
        System.out.println("\n"+"今天是"+(month+1)+"月"+today+"日"+"\n"+"请输入你要查询月份");
        Scanner userMonth = new Scanner(System.in); 
        int m = userMonth.nextInt();
    
        System.out.println("请输入你要查询日期");
        Scanner userDay = new Scanner(System.in);
        int d = userDay.nextInt();
    
        /*判断用户输入日期是否正确*/
        if(  (m < 1 || m > 12) || (d < 1 || d > 31)  ) {
            System.out.println("输入的月份和日期不正确,请重新输入");
        }
        else {
            System.out.println("你输入的日期是:"+ m +"月"+ d +"日");
    
            /*判断用户输入日期是否属于本月*/          
            if((m == (month+1))&&(d <= dt.getDefaultDay())) {
                System.out.println("输入的日期属于本月");
            }else 
                System.out.println("输入的日期不是本月");
        }
    }
    

    /*判断当月日期的最后一天,并转化为int类型*/
    public int getDefaultDay() {
    String str = "";
    SimpleDateFormat sdf = new SimpleDateFormat("dd");
    Calendar lastDate = Calendar.getInstance();
    lastDate.set(Calendar.DATE, 1);// 设为当前月的1 号
    lastDate.add(Calendar.MONTH, 1);// 加一个月,变为下月的1 号
    lastDate.add(Calendar.DATE, -1);// 减去一天,变为当月最后一天
    str = sdf.format(lastDate.getTime());
    int num = Integer.parseInt(str);
    return num;
    }
    }

//问题1:如果输入9月31,提示的是输入日期不是本月,但实际上9月并没有31日,应该提示输入错误
//问题2:如何一次性输入例如10.10这种格式的日期,并进行判断。判断的时候该如何判断
//问题3:发现Calendar.MONTH里,有时候得到的月份要+1,有时候就不用,是为什么?
感谢!!

https://zhidao.baidu.com/question/2142065446551175748.html