我有delphi的问题,我创建了一个计算工时的程序,这是一段代码:
procedure TForm1.Button1Click(Sender: TObject);
var
a,b,c,d,e,f,g,h,i,l,m,n,o,p,q,r,s,t,u,v,z,a1,b1,c1,d1,e1,f1:TTime;
begin
a := StrToTime(Edit1.Text);
b := StrToTime(Edit2.Text);
c := StrToTime(Edit3.Text);
d := StrToTime(Edit4.Text);
e := StrToTime(Edit5.Text);
f := StrToTime(Edit6.Text);
g := StrToTime(Edit7.Text);
h := StrToTime(Edit8.Text);
i := StrToTime(Edit9.Text);
l := StrToTime(Edit10.Text);
m := StrToTime(Edit11.Text);
n := StrToTime(Edit12.Text);
o := StrToTime(Edit13.Text);
p := StrToTime(Edit14.Text);
q := StrToTime(Edit15.Text);
r := StrToTime(Edit17.Text);
s := StrToTime(Edit18.Text);
t := StrToTime(Edit19.Text);
u := StrToTime(Edit20.Text);
v := StrToTime(Edit21.Text);
z := StrToTime(Edit22.Text);
a1 := StrToTime(Edit23.Text);
b1 := StrToTime(Edit24.Text);
c1 := StrToTime(Edit25.Text);
d1 := StrToTime(Edit26.Text);
e1 := StrToTime(Edit27.Text);
f1 := StrToTime(Edit28.Text);
Memo1.Text:=TimeTostr(b-a+d-c+f-e+h-g+l-i+n-m+o-n+q-p+s-r+u-t+z-v+b1-a1+d1-c1+f1-e1);
end;
end.
但是当我点击计算时,如果总计超过24小时,则回到0,我该如何解决?
由于
答案 0 :(得分:4)
我必须猜测你的真实意图,但我认为a
和b
分别代表工作日的开始和结束,c
也是如此和d
,等等。那么你想要而不是b - a + d - c + ...
,
HoursBetween(a, b) + HoursBetween(c, d) + ...
(uses DateUtils
)。
<强>更新强>
在评论中,OP提出要求也要查看会议记录。做:
var
minspan: integer;
...
minspan := MinutesBetween(a, b) + MinutesBetween(c, d) + ...;
Memo1.Text := IntToStr(minspan div 60) + ':' + IntToStr(minspan mod 60);
答案 1 :(得分:1)
这是解决您当前问题的方法:
按照声明a,b,c等的方式声明一个新变量TotalTime
。
然后删除最后一行,并将其替换为:
TotalTime := b-a+d-c+f-e+h-g+l-i+n-m+o-n+q-p+s-r+u-t+z-v+b1-a1+d1-c1+f1-e1;
Memo1.Text:= IntToStr(Trunc(TotalTime))+' day(s), '+ TimeTostr(TotalTime);
那应该显示如下:
3 day(s), 07:04:45
除了这个改变,如果我是你,我会重新考虑整个方法。从其他人在这里所说的内容中学习,不要让自己受到贬值或负面评论的影响。