德尔福秒表时间格式

时间:2015-01-11 21:07:29

标签: delphi time format delphi-xe5 stopwatch

procedure TForm1.TimerSWTimer(Sender: TObject);
var
 Hour, Min, Sec, MSec: word;
begin
 ElapsedTime := Time - StartTime + Totaltime ;
 DecodeTime(elapsedtime, Hour, Min, Sec, MSec);
 LabelSW.Text := IntToStr(Hour)  + ':'+ IntToStr(Min) + ':'+ IntToStr(Sec) + ':' + IntToStr(Msec);
end;

这是我试图在我的应用程序中实现的秒表代码,主要问题是标签上显示的时间格式是0:0:0:0,我希望它是00:00:00:000小时,分钟,秒和毫秒。我尝试了很多在网上找到的东西和代码,但没有一个能帮到我。

当我启动秒表时,时间就像这个0:0:0:1,而不是0:0:0:100:0:0:100,并且在整整一秒之后变为1小数(1而不是001)。小时,分钟和秒钟相同,它们以1位小数显示,直到达到10(9而不是09)..

我试过了:

  • Addleadingzeroes功能

    用法:

    AddLeadingZeroes(2005, 10) ;
    

    将导致&00; 0000002005'字符串值。

  • 仅限时间 - 带前导零的数字值

    ShowMessage('hh:nn:ss.zzz = '+FormatDateTime('hh:nn:ss.zzz', myDate));
    

如果你们中的任何一个好伙伴都能提供帮助,我将不胜感激。

干杯。

1 个答案:

答案 0 :(得分:7)

请参阅http://docwiki.embarcadero.com/Libraries/en/System.SysUtils.Format

labelSW.Text := Format('%2.2u:%2.2u:%2.2u:%3.3u',[Hour,Min,Sec,MSec]);

精度说明符使用零填充左边距。


使用System.Diagnostics中的RTL TStopwatch高级记录,它会变得更容易:

uses
  System.SysUtils,
  System.Diagnostics;

var
  sw: TStopwatch;
...
sw := TStopwatch.StartNew;  // Start measuring time
...
procedure TForm1.TimerSWTimer(Sender: TObject);
begin
  LabelSW.Text := 
    FormatDateTime('hh:nn:ss:zzz',sw.ElapsedMilliseconds/MSecsPerDay); 
end;