正在玩dateutils并做了一些实验。
procedure TForm1.Button1Click(Sender: TObject);
var
fromDate, toDate : TDateTime;
begin
fromDate := cxDateEdit1.Date ;
toDate := cxDateEdit2.Date ;
Label1.Caption := 'Hour difference '+IntToStr(HoursBetween(toDate, fromDate))+' hours';
Label2.Caption := 'Minute difference '+IntToStr(MinutesBetween(toDate, fromDate))+' minutes';
end;
如何在标签标题中获得时间差,如hh / mm(例如01:05)???
答案 0 :(得分:3)
TDateTime
旨在与绝对日期和时间一起使用。相反,您可以考虑TTimeSpan
单元中的System.TimeSpan
。
uses
System.TimeSpan;
....
var
d1, d2: TDateTime;
Span: TTimeSpan;
str: string;
....
d1 := ...;
d2 := ...;
Span := TTimeSpan.Subtract(d2, d1);
str := Format('%.2d:%.2d', [Span.Hours, Span.Minutes]));
这假设跨度小于一天。但是,你的输出格式似乎建立在这个假设上。
这是否真的比简单地减去两个日期时间值更好,我不太确定。
答案 1 :(得分:2)
SysUtils.FormatDateTime有许多有用的TDateTime
字符串转换:
Label3.Caption := 'Time difference [hh:mm] '+FormatDateTime('hh:nn',toDate-fromDate);
作为替代方案,请使用MinutesBetween
:
var
minutes: Integer;
...
minutes := MinutesBetween(toDate,FromDate);
Label3.Caption :=
'Time difference [hh:mm] '+Format('%.2d:%.2d',[minutes div 60,minutes mod 60]);