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

解決


ss  2009-07-06 05:11:34  No: 35040

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

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

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


Manbon  2009-07-06 17:41:54  No: 35042

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

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-07 05:34:47  No: 35043

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

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

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


TS  2009-07-07 06:36:51  No: 35044

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

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


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加