【问题标题】:Delphi Stopwatch time formatDelphi 秒表时间格式
【发布时间】:2015-01-11 21:07:28
【问题描述】:
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(2005, 10) ;
    

    将产生一个 '0000002005' 字符串值。

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

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

如果哪位好心人能帮上忙,我将不胜感激。

干杯。

【问题讨论】:

  • labelSW.Text := Format('%2.2u:%2.2u:%2.2u:%3.3u',[Hour,Min,Sec,MSec]);见docwiki.embarcadero.com/Libraries/en/System.SysUtils.Format
  • @SirRufo 不好意思,我不太适应这个,网上找了这个例子来实现,我不知道怎么用Tstopwatch atm,没试过tbh。
  • @TLama,我同意TStopWatch 是一个很好的(首选)测量时间的实用程序。但是使用隐式 TTimeSpan 类运算符格式化输出并没有给出想要的结果。如果毫秒为零,则从字符串中省略该部分,否则给出 7 位数字,例如 00:00:00.0000137
  • @TLama,我添加了一个使用 TStopWatch 的示例和另一种格式化输出的方法。

标签: delphi time format delphi-xe5 stopwatch


【解决方案1】:

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;

【讨论】:

    猜你喜欢
    • 2011-10-27
    • 1970-01-01
    • 2021-03-03
    • 1970-01-01
    • 1970-01-01
    • 2016-06-12
    • 1970-01-01
    • 2017-05-12
    相关资源
    最近更新 更多