リストボックスに、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;
TDateTimeで計算は出来ているので
FormatDateTimeで書式設定すれば表示されませんか?
>a が24時間を越えると0になってしまうようで、
日付(小数部)が1日加算されると言う事では。
日付(小数部)->日付(整数部)
すみません、ちょっと混乱していまして、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;
>実際は「0:00:00」、「19:00:00」となってしまうのです。
時間は24時表示ですから、上記で正常です。
>Edit1には「24:00」、Edit2には「43:00」と表示したい
自前で日にち×24を時刻にプラスして表示する事になると思いますが。
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;
TSさん、ありがとうございました。
どうも簡単ではないようですね;;
時分で合計値が出ればいいので、「時」を 60倍して「分」に変換して、
それから合計して、最後に時分に変換する方法でやってみます。
ツイート | ![]() |