Java计算偏移后月份最后一天的代码逻辑错误如何修复?
代码问题排查与修复
原代码核心错误点
- 时间计数逻辑错误:Java
Calendar类的MONTH字段从0开始计数(1月对应0,12月对应11),原代码反复额外加1的逻辑完全混乱,导致目标月份计算错误。 - 需求匹配错误:需求要求返回目标月份的总天数,原代码中判断当前月的分支返回的是当月剩余天数,不符合要求。
- 重复累加月份:原代码先调用
set(Calendar.MONTH, mesecorr +1 +mese),之后又多余调用add(Calendar.MONTH, mese),相当于对月份累加了两次mese,完全偏离预期。 - 语法与逻辑分支缺失:if判断分支没有写
return语句,且用到的giornoFineMese变量未声明,存在编译错误。 - 年份判断逻辑完全错误:用
(mesecorr +1 +mese) %13判断是否跨年的逻辑无依据,反而会打乱Calendar本身自带的自动跨年进位能力。
修复后可运行代码
public int getmax(int mese){ // 参数合法性校验 if(mese <0 || mese>5){ throw new IllegalArgumentException("mese参数取值范围为0~5"); } Calendar c = Calendar.getInstance(); // 直接在当前月份基础上加mese,Calendar会自动处理跨年 c.add(Calendar.MONTH, mese); // 获取目标月份的最大天数 int maxDay = c.getActualMaximum(Calendar.DAY_OF_MONTH); // 打印日志按需保留 System.out.printf("目标月份为%d月,总天数:%d%n", c.get(Calendar.MONTH)+1, maxDay); return maxDay; }
验证示例
比如当前是8月(对应Calendar.MONTH值为7),传入mese=3,加3个月后得到11月,返回30,完全符合示例要求。
内容的提问来源于stack exchange,提问作者pietro
相关产品推荐
相关产品推荐

