常见的定义如下
int month[13][2] = {{0,0},{31, 31}, {28, 29}, {31, 31}, {30, 30},
{31, 31}, {30, 30}, {31, 31}, {31, 31}, {30, 30},
{31, 31}, {30, 30}, {31, 31}};
char monthname[13][15] = {{},{"January"}, {"February"}, {"March"},
{"April"}, {"May"}, {"June"}, {"July"}, {"August"},
{"September"}, {"October"}, {"November"}, {"December"}};
char week[7][15] = {{"Monday"}, {"Tuesday"}, {"Wednesday"},
{"Thursday"}, {"Friday"}, {"Saturday"}, {"Sunday"}};
bool IsLeap(int year) // 闰年判断函数,闰年返回1(true),平年返回0(false)
{
return (year % 4 == 0 && year % 100 != 0) || (year % 400 == 0);
}
其中char week 一般用于给你一个日期,然你算星期几。这里有两个算法,蔡勒公式及基姆拉尔森计算公式,感兴趣可自行百度。这里简单介绍第二个。
基姆拉尔森计算公式
w = (y + y /4 + y / 400 - y / 100 + 2 * m + 3 * (m + 1)/5 + d) % 7;
其中y表示年份,m表示月份,d表示日。
注意:在公式中有个与其他公式不同的地方:
把一月和二月看成是上一年的十三月和十四月,
例:如果是2004-1-10则换算成:2003-13-10来代入公式计算
注:w = 0代表的是星期一,w = 6代表的是星期日。
这也就是为什么定义char week[7][15],而不定义char week[8][15]。
int Date(int y,int m,int d)
{
if(m==1||m==2)
{
m+=12;
y--;
}
int week = (d + 2*m +3*(m+1)/5 + y + y/4 - y/100 + y/400)%7+1;//注意这里加了一。
return week;
}