全國最多中醫師線上諮詢網站-台灣中醫網
發文 回覆 瀏覽次數:1864
推到 Plurk!
推到 Facebook!

判斷時間點

尚未結案
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#1 引用回覆 回覆 發表時間:2005-08-24 16:57:47 IP:220.130.xxx.xxx 未訂閱
你們好, 我現在想用一個輸入日期的方式來判斷星期幾.. 利用一個edit輸入(例20050822),那麼要用程式去判斷是否會碰到週末,若是,就加一天或兩天… 那該如何改呢? procedure TForm1.Button1Click(Sender: TObject); Function MyWorkDate(InDate : TDate) : TDate; var DOW : Word; R : TDate; s:string; begin edit1.Text:= FormatDateTime('yyyymmdd', InDate); DOW := DayOfTheWeek(InDate); if RadioButton1.Checked=true then begin Case DOW of 6 : R := InDate - 1; 7 : R := InDate -2; else R := InDate-1; end; end; if RadioButton2.Checked=true then begin Case DOW of 5:R:=InDate 3; 6 : R := InDate 2; 7 : R := InDate 1; else R := InDate 1; end; end; label1.caption := '星期' IntToStr(DayOfTheWeek(R)); Result := R; end; begin Edit2.Text := DateToStr(MyWorkDate(MonthCalendar1.Date)); end;
h@visli
資深會員


發表:103
回覆:429
積分:431
註冊:2004-02-13

發送簡訊給我
#2 引用回覆 回覆 發表時間:2005-08-24 19:45:09 IP:222.248.xxx.xxx 未訂閱
你這個問題還沒解決嗎?    另外你的描述是不是不準確?因為你的程序并不是全是碰到周末就加一天或兩天。    
uses DateUtils;    procedure TForm1.Button1Click(Sender: TObject);
  Function MyWorkDate(InDate : TDate) : TDate;
  var
    DOW: Word;
    R: TDate;
  begin
    R := InDate;
    edit1.Text:= FormatDateTime('yyyymmdd', R);
    DOW := DayOfTheWeek(R);
    if RadioButton1.Checked then
    begin
      Case DOW of
        6 : R := InDate - 1;  //變成本周星期五
        7 : R := InDate -2;   //變成本周星期五
      else
        R := InDate-1;        //? 都向後推一天?
      end;
    end
    else if RadioButton2.Checked then
    begin
      Case DOW of
        5:R:=InDate  3;       //變成下一周星期一
        6 : R := InDate  2;   //變成下一周星期一
        7 : R := InDate  1;   //變成下一周星期一
      else
        R := InDate 1;        //? 都向前推一天?
      end;
    end;
    label1.caption := '星期' IntToStr(DayOfTheWeek(R));
    Result := R;
  end;
begin
  Edit2.Text := DateToStr(MyWorkDate(MonthCalendar1.Date));
end;
---------------------------- 於Delphi K.Top之上 博采眾家之長, 奉獻綿薄之力 --------------------------- 發表人 - h@visli 於 2005/08/24 19:48:15
------
------------------------
博采眾家之長,奉獻綿薄之力
------------------------
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#3 引用回覆 回覆 發表時間:2005-08-25 14:12:54 IP:220.130.xxx.xxx 未訂閱
恩~對不起哦! 只是我想要把funtion放在  private        { Private declarations }   public     { Public declarations }   end; 以上這一區內,但改了又改.. 總是出現錯誤..真不知該怎麼辦..
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#4 引用回覆 回覆 發表時間:2005-08-26 01:52:05 IP:61.219.xxx.xxx 未訂閱
...
private
{ Private declarations }      Function MyWorkDate(InDate : TDate) : TDate;
public
{ Public declarations }
end;    procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := DateToStr(MyWorkDate(MonthCalendar1.Date));
end;    Function TForm1.MyWorkDate(InDate : TDate) : TDate;
var
  DOW: Word;
  R: TDate;
begin
  R := InDate;
  edit1.Text:= FormatDateTime('yyyymmdd', R);
  DOW := DayOfTheWeek(R);
  if RadioButton1.Checked then
  begin
    Case DOW of
      6 : R := InDate - 1;  //變成本周星期五
      7 : R := InDate -2;   //變成本周星期五
    else
      R := InDate-1;        //? 都向後推一天?
    end;
  end
  else if RadioButton2.Checked then
  begin
    Case DOW of
      5:R:=InDate  3;       //變成下一周星期一
      6 : R := InDate  2;   //變成下一周星期一
      7 : R := InDate  1;   //變成下一周星期一
    else
      R := InDate 1;        //? 都向前推一天?
    end;
  end;
  label1.caption := '星期' IntToStr(DayOfTheWeek(R));
  Result := R;
end;    
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#5 引用回覆 回覆 發表時間:2005-08-29 09:25:29 IP:220.130.xxx.xxx 未訂閱
嗯~這是我要的功能沒錯.. 但是,Edit1輸入的日期並不會受到判斷,反而直接顯示MonthCalendar1的日期.. 該怎麼改呢?    
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#6 引用回覆 回覆 發表時間:2005-08-29 09:59:12 IP:203.69.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject);
begin
  Edit2.Text := DateToStr(MyWorkDate(MonthCalendar1.Date));
  Edit1.Text := Edit2.Text;
end;    Function TForm1.MyWorkDate(InDate : TDate) : TDate;
var
  DOW: Word;
  R: TDate;
begin
  R := InDate;
  DOW := DayOfTheWeek(R);
  if RadioButton1.Checked then
  begin
    Case DOW of
      6 : R := InDate - 1;  //變成本周星期五
      7 : R := InDate -2;   //變成本周星期五
    else
      R := InDate-1;        //? 都向後推一天?
    end;
  end
  else if RadioButton2.Checked then
  begin
    Case DOW of
      5:R:=InDate  3;       //變成下一周星期一
      6 : R := InDate  2;   //變成下一周星期一
      7 : R := InDate  1;   //變成下一周星期一
    else
      R := InDate 1;        //? 都向前推一天?
    end;
  end;
  label1.caption := '星期' IntToStr(DayOfTheWeek(R));
  Result := R;
end;
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#7 引用回覆 回覆 發表時間:2005-08-29 13:56:13 IP:220.130.xxx.xxx 未訂閱
malanlk你好. 我是指Edit1要我自己keyin進去的…而非靠MonthCalendar1的日期去判定.. 這個,要怎麼做呢?
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#8 引用回覆 回覆 發表時間:2005-08-29 14:30:25 IP:203.69.xxx.xxx 未訂閱
procedure TForm1.Button1Click(Sender: TObject); begin Edit2.Text := DateToStr(MyWorkDate(DateTimePicker1.Date)); end; 將 Edit1 改用 TDateTimePicker 元件會方便許多, 可以輸入也可以挑選(TDateTimePicker 在 TMonthCalendar 元件旁邊 DELPHI 7)
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#9 引用回覆 回覆 發表時間:2005-08-30 08:59:29 IP:210.243.xxx.xxx 未訂閱
Showmessage(FormatDateTime('DDD', StrToDate(Edit1.Text))); 如果結果是星期六就加一天,星期日就加兩天囉... 試試
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#10 引用回覆 回覆 發表時間:2005-08-30 09:33:27 IP:203.69.xxx.xxx 未訂閱
to jimmy_wei 兄: Showmessage(FormatDateTime('DDD', StrToDate('2005/08/28'))); 結果: "星期日"
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#11 引用回覆 回覆 發表時間:2005-08-30 10:50:35 IP:210.244.xxx.xxx 未訂閱
malanlk 大你好: 沒錯呀...我知道會show星期天呀... 把他改成function回傳值會跟據你的語系回傳不同的星期一~星期日, 語系是英文就英文了,所以只要判斷回傳值來決定加一加加二或跟本 不加就好了呀!!??
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#12 引用回覆 回覆 發表時間:2005-08-30 12:25:20 IP:203.69.xxx.xxx 未訂閱
程式中的 DayOfTheWeek 就已經解決這個問題了吧....
jimmy_wei
高階會員


發表:9
回覆:176
積分:147
註冊:2003-08-28

發送簡訊給我
#13 引用回覆 回覆 發表時間:2005-08-30 15:04:15 IP:210.243.xxx.xxx 未訂閱
我剛重頭看了一次問題....發現我的回答有一點多餘... 我沒看清楚...^^
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#14 引用回覆 回覆 發表時間:2005-08-31 09:57:05 IP:211.20.xxx.xxx 未訂閱
malanlkp您好.. 不好意思,您建議的這個方法還不錯用.. 但如果我想強迫DateTimePicker1.Date等於我自己keyin的edit1的內容.. 要怎麼修改呢?
malanlk
尊榮會員


發表:20
回覆:694
積分:577
註冊:2004-04-19

發送簡訊給我
#15 引用回覆 回覆 發表時間:2005-08-31 12:23:58 IP:203.69.xxx.xxx 未訂閱
我的意思就是用 DateTimePicker1 取代 Edit1 你在 DateTimePicker1 的 Format property 內可以指定你要的輸入格式例如 yyyyMMdd 就是 20050831 (大寫M 表示月, 小寫m 表示分 不一樣哦) 如果還是堅持要用 Edit1 那麼你必須自己去拆解輸入的格式 例如 20050831 DateTimePicker1.Date := EncodeDate(StrToInt(Copy(Edit1.Text,1,4)),StrToInt(Copy(Edit1.Text,5,2)),StrToInt(Copy(Edit1.Text,7,2)));
tea15
初階會員


發表:64
回覆:72
積分:27
註冊:2005-06-15

發送簡訊給我
#16 引用回覆 回覆 發表時間:2005-09-02 11:49:44 IP:211.20.xxx.xxx 未訂閱
你們好.. 由這個程式,我還加一個判斷點,就是判斷國定假日的.. 條件一樣,但我必須在往前一天或往後一天再加上一個判斷是否為國定假日… 然後跳過國定假日,當然還是要判斷是否為週末. 以下是我的程式碼 private { Private declarations } d:integer; e,f:string; a:word; Function MyWorkDate(InDate : TDate) : TDate; public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin datetimepicker1.Date:=EncodeDate(strtoint(copy(edit1.Text,1,4)),strtoint(copy(edit1.Text,5,2)),strtoint(copy(edit1.Text,7,2))); Edit2.Text:=DateToStr(MyWorkDate(DateTimePicker1.Date)); e:=datetostr(datetimepicker1.Date); f:=copy(e,5,4); end; Function Tform1.MyWorkDate(InDate : TDate) : TDate; var DOW :word; R : TDate; begin d:=1; R := InDate; DOW := DayOfTheWeek(R); if RadioButton1.Checked then if (f='0101') or (f='0102')or (f='0228') then R := InDate-d; begin Case DOW of 6 : R := InDate -1; //變成本周星期五 7 : R := InDate -2; //變成本周星期五 1 : R := InDate -3; //變成本周星期五 else R := InDate-d; //都向後推一天 end; Case DOW of 6 : R := InDate -1; //變成本周星期五 7 : R := InDate -2; //變成本周星期五 1 : R := InDate -3; //變成本周星期五 else R := InDate-d; //都向後推一天 end; end; label1.caption := '星期' IntToStr(DayOfTheWeek(R)); Result := R; end;
系統時間:2024-06-01 23:23:31
聯絡我們 | Delphi K.Top討論版
本站聲明
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。
2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。
3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇!