先用DayOfWeek();求2001年4月的第1天是星期几(D)
DecodeDate(2001年4月1+(N-2)*7+7-D+M+1, yyyy, mm, dd);

解决方案 »

  1.   

    我建議你使用dayofweek函數,但是非要不想使用,你可以參照以下dayofweek的原代碼,具体反推敲,相信你可以自己搞定.
    /*c*/
    unsigned dayOfWeek(unsigned day, unsigned month, unsigned year)
    {
        int century, yr, dw;    if(month < 3)
            {
            month += 10;
            --year;
            }
        else
            month -= 2;    century = year / 100;
        yr = year % 100;
        dw = (((26 * (int)month - 2) / 10) + (int)day + yr + (yr / 4) + (century / 4) - 
                    (2 * century)) % 7;    if(dw < 0)
            dw += 7;    return((unsigned)dw);
    }/*Pascal :translate by me.很長時間沒有使用pascal,如有錯誤,請多見諒*/
    function dayofweek(day:integer,month:integer,year:integer):integer
    var 
    century,yr,dw:integer;
    begin  if month < 3 then
      begin
        month := month + 10;
        year := year - 1;
      end
      else
        month := month - 2;
        
      century := year div 100;
      yr := year mod 100;
      dw := (((26*month - 2) div 10) + day + yr + (yr div 4) + (century div 4) - (2* century)) mod 7;
      
      if dw < 0 then
        dw := dw + 7;
        
      result := dw;
      
    end;
      

  2.   

    借鉴sun-lz的方法,我自己弄出来了。
    不过方程不同,
    设当月的1号星期为D
    则所求日期的day:= (7-D)+(N-1)*7-(7-M)+1还需要加上年和月,并验证是否有这天,用EncodeDate();