時間の計算について

解決


Manbon  2008-08-06 20:27:57  No: 31492

リストボックスに、12:30  のような文字列が複数格納されていて、
その全データの合計を計算しようとして、以下のようにしました。
が、a  が24時間を越えると0になってしまうようで、
24時間を越える足し算ができません。
どのようにすればいいのでしょうか?

  a: TDateTime;

  a := 0;
  for i := 0 to Pred(ListBox1.Items.Count) do begin
      a := a + StrToTime(ListBox1.Items[i]);
    end;
  end;


Ru  2008-08-06 20:50:53  No: 31493

TDateTimeで計算は出来ているので
FormatDateTimeで書式設定すれば表示されませんか?


TS  2008-08-06 21:20:00  No: 31494

>a  が24時間を越えると0になってしまうようで、
日付(小数部)が1日加算されると言う事では。


TS  2008-08-06 21:23:40  No: 31495

日付(小数部)->日付(整数部)


Manbon  2008-08-06 22:44:04  No: 31496

すみません、ちょっと混乱していまして、TimeToStrを使用した際に
時間が変になります・・・
例えば下記で、Edit1には「24:00」、Edit2には「43:00」と表示したい
のですが、実際は「0:00:00」、「19:00:00」となってしまうのです。

var
  a: TDateTime;
begin
  a := StrToTime('23:00') + StrToTime('01:00');
  Edit1.Text := TimeToStr(a);

  a := StrToTime('23:00') + StrToTime('20:00');
  Edit2.Text := TimeToStr(a);
end;


TS  2008-08-06 22:51:52  No: 31497

>実際は「0:00:00」、「19:00:00」となってしまうのです。
時間は24時表示ですから、上記で正常です。

>Edit1には「24:00」、Edit2には「43:00」と表示したい
自前で日にち×24を時刻にプラスして表示する事になると思いますが。


TS  2008-08-06 23:09:43  No: 31498

var
var
  a: TDateTime;
  Year, Month, Day, Hour, Min, Sec, MSec: Word;
begin
  省略 
  DecodeDate(a, Year, Month, Day);
  DecodeTime(a, Hour, Min, Sec, MSec);
  Edit1.text := Format('%.4d/%.2d/%.2d %.2d:%.2d:%.2d', [Year, Month, Day, Hour, Min, Sec]);
end;


Manbon  2008-08-07 18:15:51  No: 31499

TSさん、ありがとうございました。
どうも簡単ではないようですね;;

時分で合計値が出ればいいので、「時」を 60倍して「分」に変換して、
それから合計して、最後に時分に変換する方法でやってみます。


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

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






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