//计算第N周的起始日期
COleDateTime GetWeekStartDate(int nYear,int nWeekNumber)
{
COleDateTime tt(nYear,1,1,0,0,0);
if( nWeekNumber > 1 )
{
int n = 7-tt.GetDayOfWeek();
COleDateTimeSpan s(n+1,0,0,0);
tt += s;
s.SetDateTimeSpan(7,0,0,0);
for(int k=2;k<nWeekNumber;k++)
tt += s;
}
return tt;
}
//计算第N周的结束日期
COleDateTime GetWeekEndDate(int nYear,int nWeekNumber)
{
COleDateTime tt(nYear,1,1,0,0,0);
int n = 7-tt.GetDayOfWeek();
COleDateTimeSpan s(n,0,0,0);
tt += s;
if( nWeekNumber > 1 )
{
s.SetDateTimeSpan(7,0,0,0);
for(int k=1;k<nWeekNumber;k++)
tt += s;
}
return tt;
}
有这两个日前,再判断是否在同一个月就简单了

解决方案 »

  1.   

    楼上哥们好厉害啊,我给你补个main函数吧,呵呵
    void main()
    {
    COleDateTime tt1, tt2;
    tt1 = GetWeekStartDate(2007, 8);
    tt2 = GetWeekEndDate(2007, 9);
    int date1 = tt1.GetMonth();
    int date2 = tt2.GetMonth();
    if(data1 == data2)
    cout<<"The two week is in the same month!"<<endl;
    else
    cout<<"The two week is not in the same month!"<<endl;
    }
      

  2.   

    short iDayOfWeek;SYSTEMTIME st={0};
    FILETIME ft={0};//计算该年的第一天是星期几
    st.wYear=2008;
    st.wMonth=1;
    st.wDay=1;SystemTimeToFileTime(&st, &ft);
    FileTimeToSystemTime(&ft, &st);iDayOfWeek=st.wDayOfWeek; //** 任意给定两个周数 
    short weeks1,weeks2;//**计算每周的第一天距1月1日的天数short days1=7*weeks1-iDayOfWeek;
    short days2=7*weeks2-iDayOfWeek;//** 计算距1月1日的时间偏移量
    union
    {
      ft1;
      ULONGLONG utime1;
    };
    union
    {
      ft2;
      ULONGLONG utime2;
    };ft1=ft;
    ft2=ft;
    utime1+=UInt32x32To64(days1*24*3600, 10000000); //秒数*10000000
    utime2+=UInt32x32To64(days2*24*3600, 10000000);//** 将filetime转换成systemtime并比较月份是否相同
    SYSTEMTIME st1, st2;
    FileTimeToSystemTime(&ft1, &st1);
    FileTimeToSystemTime(&ft2, &st2);if(st1.wYear==st2.wYear && st1.wMonth==st2.wMonth) //月份相同