单晶力地带 https://passport2.21ic.com/?228522 [收藏] [复制] [RSS] 单片机,C语言,电子...我都喜欢!

日志

一个非常简洁的 程序 计算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代表星期天,使用者应该加上日前限定的功能。

路过

鸡蛋

鲜花

握手

雷人

评论 (0 个评论)