none
求两个日期之间的天数的问题,最后实例代码不知道哪里错了 RRS feed

  • 问题

  • 有这样一个问题:一共18个人,分9组。每组人轮流负责一个礼拜的卫生,写这样一个程序,求出每一个礼拜是哪一组负责卫生?这样就有个问题,要得到当前日期是第几周,然后用除以9得到的余数可以算出是哪个组负责卫生。

    可是怎么得到当前日期是第几周?

     



    2012年1月26日 10:20

答案

  • Honny_yeyh 你好!

    我猜你是想计算当前日期是这一年的第几周。也就是说,今天是1.30,是2012年的第五周。

    你可以设定一个参考日期,比如2012年1月1日,然后计算出当前日期和参考日期之间的间隔天数。用间隔天数除以7,就能得到从2012年开始的第几周。

    希望我的回复对你有所帮助。


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Honny_yeyh 2012年1月31日 9:07
    2012年1月30日 2:25
  • 参考日期可以设置为2000年1月1日吗? 谢谢


    当然也可以。

    只不过,参考日期设置的不同,得到的结果可能也就不一样。

     

    希望我的回复对你有所帮助!

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Honny_yeyh 2012年1月31日 9:07
    2012年1月30日 3:24

全部回复

  • Honny_yeyh 你好!

    我猜你是想计算当前日期是这一年的第几周。也就是说,今天是1.30,是2012年的第五周。

    你可以设定一个参考日期,比如2012年1月1日,然后计算出当前日期和参考日期之间的间隔天数。用间隔天数除以7,就能得到从2012年开始的第几周。

    希望我的回复对你有所帮助。


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Honny_yeyh 2012年1月31日 9:07
    2012年1月30日 2:25
  • 参考日期可以设置为2000年1月1日吗? 谢谢
    2012年1月30日 2:35
  • 参考日期可以设置为2000年1月1日吗? 谢谢


    当然也可以。

    只不过,参考日期设置的不同,得到的结果可能也就不一样。

     

    希望我的回复对你有所帮助!

     


    Helen Zhao [MSFT]
    MSDN Community Support | Feedback to us
    • 已标记为答案 Honny_yeyh 2012年1月31日 9:07
    2012年1月30日 3:24
  • struct tm *localtime(const time_t *timer)
    直接可返回struct tm

    其中tm_yday标记的是今天是今年的第几天。

    用这个值除7可以得到是今年的第几周。

     

    如果使用MFC直接可以用CTime,得到两个日期的距离。


    麻烦把正确答案设为解答。
    2012年1月30日 3:31
    版主
  • struct tm *localtime(const time_t *timer)
    直接可返回struct tm

    其中tm_yday标记的是今天是今年的第几天。

    用这个值除7可以得到是今年的第几周。

     

    如果使用MFC直接可以用CTime,得到两个日期的距离。


    麻烦把正确答案设为解
    如果是跨年怎么办?
    2012年1月30日 4:36
  • int daysFrom11(int year,int month,int day){
    int days[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
    int i,sum=0;
    for(i=0;i<month;i++)
       sum+=days[i];
    if(month>2)
       if((year%4==0)&&(year%100!=0)||(year%400==0))
        sum+=1;
       sum+=day;
       return sum;
    }

    void swap(int *x1,int *x2){
    int tmp=*x1;
    *x1=*x2;*x2=tmp;
    }

    long difs2Date(int y1,int m1,int d1,int y2,int m2,int d2){
    int from11yr1,from11yr2;
    long totalDays=0;
    if(y1>y2){
       swap(y1,y2);
       swap(m1,m2);
       swap(d1,d2);
    }
    if(y1==y2){
       from11yr1=daysFrom11(y1,m1,d1);
       from11yr2=daysFrom11(y2,m2,d2);
       totalDays=abs(from11yr1-from11yr2)+1;
    }
    else{
       from11yr1=daysFrom11(y1,m1,d1);
       int total_day1=365-from11yr1+1;                         //error C2143: syntax error : missing ';' before 'type'
       if(m1<=2)
        if(y1%4==0&&(y1%100!=0)||(y1%400==0))
         total_day1+=1;                                                     //error C2065: 'total_day1' : undeclared identifier
       totalDays+=total_day1;
       int tmpYear=y1;                                                      //error C2143: syntax error : missing ';' before 'type'
       while(++tmpYear<y2){                                          //error C2065: 'tmpYear' : undeclared identifier
        int tmpDays=365;
        if((tmpYear%4==0)&&(tmpYear%100!=0)||(tmpYear%400==0))
         tmpDays+=1;
        totalDays+=tmpDays;
       }
       from11yr2=daysFrom11(y2,m2,d2);
       totalDays+=from11yr2;
    }
    return totalDays-1;
    }

    2012年1月30日 5:33