【问题标题】:Get starttime or endtime from TStopWatch从 TStopWatch 获取开始时间或结束时间
【发布时间】:2014-07-28 15:10:12
【问题描述】:

是否可以从 Delphi 2010 中的 TStopWatch 获取(TDateTime)开始时间(或结束时间)?

来自 cmets 的澄清:我不需要考虑多次停止/重新启动,只需要秒表启动的日期和时间。

【问题讨论】:

  • 您应该将delphi 标签添加到您的delphi 相关问题中。 (4k 用户也应该知道这一点)
  • 是什么让您无法阅读documentation 并自己回答问题? - 很简单,不,你不能
  • 您需要更清楚地定义您的术语。什么是结束时间?何时调用 Stop 方法?还是现在的时间?秒表可以运行或停止。秒表可以启动多次。你想要哪个开始时间?
  • @SirRufo,你为什么不能?停止后是结束时间。减去经过的毫秒是开始时间...
  • TStopWatch 的记录足以回答您的问题。我只需要声明部分来回答它。开始时间没有没有公共财产,大卫指出了原因。如果您想要一个秒表,只需复制粘贴源代码并使用更多公共属性构建您自己的秒表记录。只需一小段代码即可实现。

标签: delphi datetime delphi-2010


【解决方案1】:

没有属性可以返回秒表开始的时间。所以我认为你必须做一些算术才能解决这个问题。

  • ElapsedTicks 除以Frequency 以获得自秒表开始以来的秒数。
  • 从现在的时间减去这个值,得到秒表开始的时间。

代码可能如下所示:

uses
  Diagnostics, DateUtils;

function GetStopwatchStart(const Stopwatch: TStopwatch): TDateTime;
var
  ElapsedSeconds: Double;
begin
  ElapsedSeconds := Stopwatch.ElapsedTicks / Stopwatch.Frequency;
  Result := IncMillisecond(Now, -Round(ElapsedSeconds*1000));
end;

请注意,这假定秒表正在运行,并且从未暂停。

【讨论】:

  • 用“现在”简单地修改秒表开始和停止方法来存储当前的 TDateTime 会比做所有复杂的数学更容易吗?
  • @Silver 如果您正在编写库代码并且不能修改 rtl 代码,则不会。或者确实有任何其他正当理由不修改 rtl 代码。
  • TStopWatch 在 System.Diagnostics 单元中声明。事实上,这是该单元中唯一的东西。因此,如果您害怕对此单元进行更改,请复制它,进行必要的更改并将 TStopWatch 的名称更改为 TModifiedStopWatch。这样您就可以在不破坏原始代码的情况下进行所有需要的更改。
  • @silver 如果您愿意,请随意这样做。这个问题涉及到 TStopwatch。
  • 是的,我了解最初的问题与 TStopWatch 本身有关。这就是为什么我没有将此作为答案发布的原因。
猜你喜欢
  • 1970-01-01
  • 2020-02-22
  • 1970-01-01
  • 1970-01-01
  • 2019-01-25
  • 2020-11-09
  • 2021-09-06
  • 1970-01-01
  • 2023-01-05
相关资源
最近更新 更多