在golang-go/src/time.go中,为什么daysPer100Years=365*100+24



我正在阅读package time的golang源代码
我得到了一些常量,比如:

// file: /usr/local/go/src/time/time.go
const (
secondsPerMinute = 60
secondsPerHour   = 60 * secondsPerMinute
secondsPerDay    = 24 * secondsPerHour
secondsPerWeek   = 7 * secondsPerDay
daysPer400Years  = 365*400 + 97
daysPer100Years  = 365*100 + 24
daysPer4Years    = 365*4 + 1
)

我想知道为什么

daysPer400Years  = 365*400 + 97
daysPer100Years  = 365*100 + 24

但不是

daysPer400Years  = 365*400 + 100
daysPer100Years  = 365*100 + 25

当我输入这个问题时,我自己得到了答案----

通常我们称一年为闰年,如果X可以被4整除。虽然X年可以被100整除,但不能被400整除,我们说X不是闰年。

这意味着,每100年,至少有24个闰年。在这100年中,有一年必须被100整除,但可能不能被400整除,这种现象发生的概率为3/4。换句话说,每100年,24个闰年的概率为75%,25个闰年为25%。这就是的原因

daysPer100Years  = 365*100 + 24

每400年,必须有3年可以被100整除,但不能被400整除。这就是的原因

daysPer400Years  = 365*400 + 97
//that is : daysPer400Years  = 365*400 + (25 * 4 - 3)
//     or : daysPer400Years  = 365*400 + (24 * 4 + 1)

最新更新