いつもお世話になります。
時間による分岐について質問させてください。
毎日、一定の時間 10:00〜11:00に起動した時は、Aの作業
12:00〜12:30間に起動した時はぼ作業みたいにしたいのですが、
現在以下のようにしてifを並べているのですが、もっと良い方法か
コンポーネントのような物がないでしょうか?
if ((NowTime >= Date + EncodeTime(10,00,00,00)) or (NowTime < Date + EncodeTime(11,00,00,00))) then
よろしくお願いします。
あらかじめTimeOfで時刻だけ取り出しておけば、Dateとの加算はいりませんよね。
(時刻だけ置き換えるにしてもReplaceTime使った方がいいと思いますが)
それと、その例のorはandでは?
あとは、時間の範囲がたとえば30分刻みと決まっているなら
case HourOf(Time) * 2 + MinuteOf(Time) div 30 で分岐するとか、
配列で範囲を定義してループでチェックするとか。
時刻だけなら以下はどうでしょうか?
ib: Byte;
ib := StrToInt(FormatDateTime('hh', Now));
case ib of
0:begin
//0時〜1時
end;
1:begin
//1時〜2時
end;
・
・
・
23:begin
//23時〜24時
end;
end;
HourOf (HourOfTheDay) 関数で時間単位にシンプルに分岐するのはどうですか?
case HourOf(TheTime) of
0: begin .... end;
1: beign .... end;
23: begin .... end;
end;
ただし、分単位で区切る必要がある場合はダメですが
>コンポーネントのような物がないでしょうか?
そんな物は無いと思いますが。
function TimeBingo(St1,St2:String):boolean;
var time1,time2:TTime;
begin
time1:=StrToTime(St1);
time2:=StrToTime(St2);
if (time1 <=time) and (time2 > time) then
result:=true
else
result:=False;
end;
procedure TForm1.BitBtn1Click(Sender: TObject);
begin
if TimeBingo('21:30','23:28') then
BitBtn1.Caption:='当たり'
else
BitBtn1.Caption:='外れ';
end;
参考になりました。
なんとかできそうです。
torさん、Manbonさん、HourOf? TSさん
ありがとうございました。
ツイート | ![]() |