万年历星期的算法(C语言)
#include
code unsigned char WeekTab[] = { //闰年月星期表 (3 << 5) + 31,//1月
(6 << 5) + 29,//2月
(0 << 5) + 31,//3月
(3 << 5) + 30,//4月
(5 << 5) + 31,//5月
(1 << 5) + 30,//6月
(3 << 5) + 31,//7月
(6 << 5) + 31,//8月
(1 << 5) + 30,//9月
(4 << 5) + 31,//10月
(0 << 5) + 30,//11月
(2 << 5) + 31 //12月
};
/*------------2000年~2099年星期算法----------*/
unsigned char WeekDay20(unsigned char y, unsigned char m, unsigned char d) {
unsigned char week, day;
day = WeekTab[m - 1]; //月表
week = day >> 5; //月星期数 day &= 0x1f; //月天数 if ((m < 3) && (y & 0x03))
{ //平年
if (m == 2) day--; //平年月天数 week++; //平年月表+1 }
y = y + (y >> 2); //年+年/4
week = (week + y + d + 2) % 7; //(星期=年+年/4+月表+2日)%7 return (week << 5) | day; //返回星期和月天数 }
/*--------------0000年~9999年星期算法------------*/
unsigned char WeekDay(unsigned char c, unsigned char y, unsigned char m, unsigned char d)
{
unsigned char week, day;
c &= 0x03; //百年%4 c = c | (c << 2); //百年%4*5 day = WeekTab[m - 1]; //月表
week = day >> 5; //月星期数