時間の計算方法は?

解決


えみ  2004-11-09 00:22:04  No: 11659  IP: [192.*.*.*]

2つのテキストボックスに時間を入力して、
ボタンをクリックしたらその差は何時間かラベルに表示する処理を作りたいと思っています。
以下のような処理を作りたいのですが、わからないことが多いので、
アドバイスを下さい。

<質問1>
まず、Edit1に開始時間を入力し、Edit2に終了時間を入力します。
どちらも24時間表記です。
この時に「HH:MM」と時間と分だけを入力させて、不正値を入力したら
メッセージを表示させるようにしたいのですが、簡単にチェックできる方法はありませんか?
左の2桁が23を超えていないか、右の2桁が59を超えていないか、と
チェックしなくても出来るような気がするのですが、わかりませんでした。。
秒は入力させたくないのですが、何かいい方法はありませんか?

<質問2>
開始時間(Edit1)と終了時間(Edit2)に入力された時間を基に計算して
作業時間をLabel1に表示させたいと思います。
普通に「終了時間−開始時間」とすればいいと思うのですが、
開始時間に20:00、終了時間に3:00と入力された場合には
そのまま「終了時間−開始時間」をしてしまうと計算結果がおかしくなってしまいます。
終了時間(左2桁)が23を超えていたら、終了時間に24を足してから計算するしかないのでしょうか?


以上2点で何かいい方法がないか悩んでいます。
片方だけでも結構ですので、アドバイスを下さい。
よろしくお願いします。

編集    削除
HOta  2004-11-09 01:00:56  No: 11660  IP: [192.*.*.*]

えみさん、こんにちは

<質問1>
var
  Time1:TTime;

TTimeに変換してみます。
   try
      time1 := StrToTime(Edit1.text);
   except
      ShowMessage(Edit1.text + 'は時刻ではありません。');
      Edit1.Setforcus;
   end;

<質問2>
こちらは、私もあやふやです。
24:00いないであることが条件ですが、やはり、time1>time2の場合、
24:00を超しているので、別の計算にした方がよいでしょう。
本当は日にちが入らないといけないのですが、たぶんそんな入力は
しないと思います。

編集    削除
えみ  2004-11-09 01:16:27  No: 11661  IP: [192.*.*.*]

HOtaさん、ありがとうございます。

<質問1>
これは私も考えたのですが、この方法でEdit1に「27:80」と入力すると
「EConvertErrorクラスの例外を生成しました」のエラーが表示されてから
自分で設定したエラーメッセージが表示されます。
これはDelphiから実行しているから表示されるだけであって、
特に気にしなくてもいいのでしょうか?

<質問2>
ご察しの通り、日付は持っていないですね。
出来るだけ簡単に入力したい、ということなので。。
別の計算方法というと、やはり24時間を足してから引き算をする、
という方法が無難でしょうか?

編集    削除
HOta  2004-11-09 01:25:10  No: 11662  IP: [192.*.*.*]

えみさん、こんにちは

Delphiからのエラーかどうかは、
デバッガオプションの言語固有の例外ページの
Delphi言語の例外で停止を外してみて下さい。開発環境の
エラーが避けられます。

<質問2>は
単純にした法が良いでしょう。後で、条件が出てくれば、
何か関数にした方が良いかもしれません。

編集    削除
えみ  2004-11-09 02:03:34  No: 11663  IP: [192.*.*.*]

チェックを外したら開発環境のエラーは避けられました。
<質問1>はこの方法がいいでしょうね。

<質問2>は単純に24を足して計算します。
いろいろなところで使う処理ですので、
関数で作成しておくことにします。
ありがとうございました。

編集    削除