判斷時間點 |
尚未結案
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
你們好,
我現在想用一個輸入日期的方式來判斷星期幾..
利用一個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 發送簡訊給我 |
你這個問題還沒解決嗎? 另外你的描述是不是不準確?因為你的程序并不是全是碰到周末就加一天或兩天。
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 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
... 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 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
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 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
|
jimmy_wei
高階會員 發表:9 回覆:176 積分:147 註冊:2003-08-28 發送簡訊給我 |
|
tea15
初階會員 發表:64 回覆:72 積分:27 註冊:2005-06-15 發送簡訊給我 |
|
malanlk
尊榮會員 發表:20 回覆:694 積分:577 註冊:2004-04-19 發送簡訊給我 |
我的意思就是用 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 發送簡訊給我 |
你們好..
由這個程式,我還加一個判斷點,就是判斷國定假日的..
條件一樣,但我必須在往前一天或往後一天再加上一個判斷是否為國定假日…
然後跳過國定假日,當然還是要判斷是否為週末.
以下是我的程式碼 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;
|
本站聲明 |
1. 本論壇為無營利行為之開放平台,所有文章都是由網友自行張貼,如牽涉到法律糾紛一切與本站無關。 2. 假如網友發表之內容涉及侵權,而損及您的利益,請立即通知版主刪除。 3. 請勿批評中華民國元首及政府或批評各政黨,是藍是綠本站無權干涉,但這裡不是政治性論壇! |