時間の範囲で分岐するには?

解決


ss  2009-07-05 20:11:34  No: 35040  IP: 192.*.*.*

いつもお世話になります。
時間による分岐について質問させてください。
毎日、一定の時間  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

よろしくお願いします。

編集 削除
tor  2009-07-05 21:55:23  No: 35041  IP: 192.*.*.*

あらかじめTimeOfで時刻だけ取り出しておけば、Dateとの加算はいりませんよね。
(時刻だけ置き換えるにしてもReplaceTime使った方がいいと思いますが)
それと、その例のorはandでは?

あとは、時間の範囲がたとえば30分刻みと決まっているなら
case HourOf(Time) * 2 + MinuteOf(Time) div 30 で分岐するとか、
配列で範囲を定義してループでチェックするとか。

編集 削除
Manbon  2009-07-06 08:41:54  No: 35042  IP: 192.*.*.*

時刻だけなら以下はどうでしょうか?

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?  2009-07-06 20:34:47  No: 35043  IP: 192.*.*.*

HourOf (HourOfTheDay) 関数で時間単位にシンプルに分岐するのはどうですか?

case HourOf(TheTime) of
   0: begin  ....  end;
   1: beign  ....  end;


  23: begin  ....  end; 
end;
ただし、分単位で区切る必要がある場合はダメですが

編集 削除
TS  2009-07-06 21:36:51  No: 35044  IP: 192.*.*.*

>コンポーネントのような物がないでしょうか?
そんな物は無いと思いますが。
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;

編集 削除
ss  2009-07-08 08:15:21  No: 35045  IP: 192.*.*.*

参考になりました。
なんとかできそうです。
torさん、Manbonさん、HourOf?  TSさん
 ありがとうございました。

編集 削除