德尔福以特定格式获得小时和分钟差异

时间:2016-10-17 13:11:52

标签: delphi

正在玩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)???

2 个答案:

答案 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]);