日期的计算很重要!
一、关于闰年
闰年是一类比较特殊的年份,闰年比平年(非闰年)在2月份多一天。下面是关于闰年的判断。
1. 年份非整百且能被4整除的年是闰年。(例如2004是闰年)
2. 年份能被400整除的年是闰年。(例如2000年是闰年,1800年不是闰年)
注意,能被100整除的年份,必须要被400整除才是闰年。
int is_leap_year(int year) {
if (year % 400 == 0 || (year % 100 != 0 && year % 4 == 0)) {
return 1;
}
return 0;
}
二、关于星期
例如公元1年1月1日是星期一。然后一天一天模拟,算出日期是星期几。这种方法容易理解,但是实现起来代码很长。除此以外,有一个公式可以快速地根据日期计算这一天是星期几,这被称为是蔡基姆拉尔森计算公式。
假设星期位 w ,年份位 y ,月份为 m ,日期为 d。
w = (d + 2*m + 3*(m+1)/5 + y +y/4 - y/100 + y/400)% 7
然后把计算出来的 w 加上 1 就是真正的星期几了。
注意每年的1,2月要当成上一年的13,14月来计算,上述的除法均为整除。