Java输入mm/dd/yyyy格式日期计算星期结果早1天问题排查
修复方案
核心错误点
- 存在无效冗余计算:
calculateDays方法中针对leapYear的3行计算逻辑完全错误,你定义的leapYear是年份前两位,这段逻辑无实际意义,直接导致总天数计算出现固定偏移 - 余数匹配偏移1位:当前总天数模7得到的余数,比实际星期对应的正确余数小1,因此所有结果都早1天
- 原有闰年判断逻辑不完整,未覆盖整百年判断规则,存在偶发误差隐患
具体修改操作
- 直接删除
calculateDays方法中以下3行无效代码:
days -= leapYear; if(leapYear%4 == 0){ days += (int)(leapYear/4); }
- 修正星期匹配偏移:将
output方法中的remainder = days % 7;修改为:
remainder = (days + 1) % 7;
- (可选优化,避免整百年计算错误)替换原有闰年计算逻辑,补全完整闰年规则:
boolean isLeapYear = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0); if (isLeapYear && month <= 2) { days += (year - 1) / 4 - (year - 1) / 100 + (year - 1) / 400; } else { days += year / 4 - year / 100 + year / 400; }
修改完成后即可得到正确的星期结果,可任意输入日期验证。
内容的提问来源于stack exchange,提问作者mattsmith
相关产品推荐
相关产品推荐

