prev up next   top/contents search

comp.lang.c FAQ 列表· 问题 20.32

(年份 % 4 == 0)是判断闰年的准确测试吗?(2000 年是闰年吗?)


不,它不准确(而且是的,2000 年是闰年)。目前公历的实际规则是,闰年每四年一次,但不是每百年一次,*但*每四百年一次。在 C 语言中,这些规则可以表示为:

	year % 4 == 0 && (year % 100 != 0 || year % 400 == 0)
有关详细信息,请参阅一份好的天文年历或其他参考资料 [脚注]

实际上,如果感兴趣的域受到限制(可能受 32 位有符号time_t的范围限制),以便它仅包含 2000 年这一世纪年份,那么表达式

	year % 4 == 0		/* 1901-2099 only */
是准确的,尽管不够健壮。

如果您信任 C 库的实现者,则可以使用mktime来确定给定年份是否为闰年;有关提示,请参阅问题 13.1420.31 中的代码片段。

另请注意,从儒略历过渡到格里高利历涉及删除几天,以弥补累积的误差。(天主教国家在教皇格列高利十三世的领导下于 1582 年 10 月首次进行了过渡,涉及删除 10 天。在大英帝国,在 1752 年 9 月采用格里高利历时删除了 11 天。少数国家直到 20 世纪才过渡。)必须适用于历史日期的日历代码因此必须特别小心。

另请参阅问题 13.14b


prev up next   contents search
关于此 FAQ 列表   关于 Eskimo   搜索   反馈   版权

Eskimo North 托管