闰年判断公式为 (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0),结合%、&&、||运算符实现;据此可计算2月天数、全年天数及手动日期累加,需注意运算符优先级与边界校验。

Java 中判断闰年和进行日期计算,主要依靠逻辑运算符、算术运算符和条件语句配合实现,不需要依赖复杂类库也能完成基础逻辑。
闰年判断的核心逻辑与运算符应用
闰年规则是:能被 4 整除但不能被 100 整除,或者能被 400 整除的年份为闰年。这直接对应 Java 中的 &&(逻辑与)、||(逻辑或)、%(取模)运算符:
-
% 运算符用于判断整除关系,例如
year % 4 == 0表示 year 能被 4 整除 -
&&连接两个必须同时成立的条件,如
(year % 4 == 0) && (year % 100 != 0) -
||连接两个可任一成立的条件,完整表达式为:
boolean isLeap = (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
用运算符辅助计算某年天数或某月天数
一年是否为闰年,直接影响 2 月天数(28 或 29),进而影响全年总天数(365 或 366)。可用三元运算符 ? : 快速封装:
- 2 月天数:
int febDays = isLeap ? 29 : 28; - 全年天数:
int yearDays = isLeap ? 366 : 365; - 各月天数也可用数组+下标运算符 [] 配合处理,例如:
int[] daysInMonth = {31, isLeap ? 29 : 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
简单日期累加与跨月/跨年判断(不依赖 Calendar)
若仅做基础日期推进(如“从 2024-02-28 加 3 天”),可结合算术运算符 +、--、++ 和比较运算符 <= 实现手动进位:
立即学习“Java免费学习笔记(深入)”;
- 先对日加值,再判断是否超过当月最大天数;若超,则日归 1,月加 1
- 月超过 12 时,月归 1,年加 1
- 关键点在于每次变更后重新调用闰年判断,更新 2 月天数,例如:
if (day > daysInMonth[month - 1]) { day = 1; month++; }
注意事项与常见误区
初学容易忽略运算符优先级和边界情况:
-
% 的优先级高于 ==,所以
year % 4 == 0正确,而year % (4 == 0)是语法错误 - 负数年份或零年不参与公历闰年规则,代码中建议先校验
year > 0 - 直接用
year % 4 == 0判断所有闰年会误判 1900 年(它不是闰年),必须完整包含 100 和 400 的条件


















