算术运算假设一年有 365 天¶
ID: cpp/leap-year/adding-365-days-per-year
Kind: problem
Security severity:
Severity: warning
Precision: medium
Tags:
- leap-year
- correctness
Query suites:
- cpp-security-and-quality.qls
公历(现已成为国际通用的民用历法)的闰年规则是:凡是能被 4 整除的年份都是闰年,但能被 100 整除的年份除外,这些世纪年份只有在能被 400 整除时才是闰年。
当软件(以任何语言编写)在编写时未考虑闰年逻辑,或计算闰年的逻辑有误时,就会出现闰年错误,这通常会导致结果不正确。
这些错误的影响可能从几乎不可察觉的错误(例如日期错误)到影响受影响系统可靠性、可用性甚至安全性的严重错误不等。
在对表示日期的变量执行算术运算时,必须考虑闰年。不能假设一年有 365 天。
建议¶
确定所述时间跨度是否包含闰日,然后使用正确的天数进行计算。或者,使用已经包含正确闰年逻辑的既定库例程。
参考资料¶
美国国家航空航天局 / 戈达德太空飞行中心 - 日历
维基百科 - 闰年错误
微软 Azure 博客 - 您的代码是否已准备好迎接闰年?