一个非常简洁的 程序 计算2000~2099年任一天是星期几[转]
已有 815 次阅读2009-2-20 13:16
|个人分类:想说就说|系统分类:单片机|
计算星期几
// 计算2000~2099年任一天星期几
// year : 00-99
// month: 01-12
// day : 01-31
unsigned char GetWeekFromDay(unsigned char year,unsigned char month,unsigned char day)
{
if( month == 1 || month == 2 )
{
month += 12;
if( year > 0 )
year--;
else
year = 4;
}
// 返回星期几(星期一用1表示,而星期天用7表示)
return 1+(( day + 2*month + 3*(month+1)/5 + year + year/4 ) %7);
}
试了几个日期算了下 都对的。
感觉好神奇。
年月日星期之间都应该有规律的吧
有没有强人 能分析下 年 月 日 星期 之间的数学关系啊
//我一直在用的代码,呵呵,至少我觉得比楼主的效率高,不论空间还是时间,另外,扩展个几千年也很容易。
//51的话,可以定义在CODE,不光省RAM,还节省代码空间(少一条MOV指令)。
uchar WeekData[]={0,3,3,6,1,4,6,2,5,0,3,5};
/*2000-2099*/
unsigned char GetWeekDay(unsigned char year,unsigned char month,unsigned char day)
{
return ((6+WeekData[month-1]+year+day+year/4)%7);
}
刚才忘了说了,这里0代表星期天,使用者应该加上日前限定的功能。