计算星期几的函数

可是有点小错误(结果差两天),请教高手. 

struct Date

{

int month; int day; int year;

};

class TDate

{

protect: Date pDate;

public:int WeekDay();

//其他接口函数省略,在这里主要解决的是星期,所以不考虑.

};

//--------------------------------------------
int TDate::WeekDay()
{
 if(pDate->year<1980)   return 8;                          //1980年前不计算
 long days=0;                                                        //1980.1.6是星期日
 days=(pDate->year-1980)*365;
 for(int y=1;y<pDate->year;y++)                         //有几个闰年就加几次
  if(y%4==0)
    days++;
 if(pDate->month==1)                                        //若是一月
   days+=pDate->day;
 else
   {
    for(int i=1;i<pDate->month;i++)                     //过几个月加加上响应的天数
     {
      switch(i)
       {
        case 1:
        case 3:
        case 5:
        case 7:
        case 8:
        case 10:
        case 12:days+=31;
                break;
        case 4:
        case 6:
        case 9:
        case 11:days+=30;
                break;
        case 2:
                if((pDate->year)%4)
                  days+=29;
                else
                  days+=28;
                break;
        };
     }
     days+=pDate->day;                                   //该月的第几天,要加上

    }

  return (days-4)%7;                                       //days是与1980年1月6日相差的天数                       //这里应是return (days-6)%7;,但是运行的结果差两天!

}


所以,请教一下.

posted on 2007-04-18 20:41 交流者 阅读(232) 评论(0)  编辑 收藏 引用


只有注册用户登录后才能发表评论。
网站导航:   博客园   博客园最新博文   博问   管理


导航

<2026年6月>
31123456
78910111213
14151617181920
21222324252627
2829301234
567891011

统计

常用链接

留言簿(1)

随笔档案

搜索

最新评论