我正在研究 Java 8 中关于日期 API 的实现,并找到了以下内容:
根据ISO全历法规则,检查年份是否为闰年。
此方法在整个时间线上应用当前的闰年规则。通常,如果一个年份能够被4整除,则它是闰年。但是,如果一个年份能够被100整除,则它不是闰年,但是如果这个年份能够被400整除,则是闰年。
例如,1904年是闰年,因为它可以被4整除。1900年不是闰年,因为它可以被100整除,然而2000年是闰年,因为它可以被400整除。
计算是先行的——将相同的规则应用到遥远的未来和过去。这在历史上是不准确的,但对于ISO-8601标准是正确的。
public boolean isLeapYear(long prolepticYear) {
return ((prolepticYear & 3) == 0) && ((prolepticYear % 100) != 0 || (prolepticYear % 400) == 0);
}
但是给我们一个prolepticYear和3。
11111001111
&
00000000011
00000000011
什么是prolepticYear & 3?
prolepticYear
大于等于0时,prolepticYear & 3
等同于prolepticYear % 4
。其中&
是按位与运算符。 - Thomas Fritsch