在Delphi 2010中混淆了TTimeSpan的使用

我在Delphi 2010中尝试了新的Record类型TTimeSpan.但我鼓励一个非常奇怪的问题.
assert(TTimeSpan.FromMilliseconds(5000).Milliseconds = 5000);

这个断言没有通过. ‘TTimeSpan.FromMilliseconds(5000).Milliseconds’的值预计为5000,但它为0.

我深入挖掘:

function TTimeSpan.GetMilliseconds: Integer;
begin
  Result := Integer((FTicks div TicksPerMillisecond) mod 1000);
end;

FTicks = 50000000
TicksPerMillisecond = 10000
FTick div TicksPerMillisecond = 50000000 div 10000 = 5000
(FTick div TicksPerMillisecond) mod 1000 = 5000 mod 1000 = 0 // I do not understand,why mod 1000
Integer((FTick div TicksPerMillisecond) mod 1000) = Integer(0) = 0

我的代码解释是正确的,不是吗?

更新:方法GetTotalMilliseconds(双精度)正确实现.

解决方法

您将给定在给定单位中表示的总金额的属性混淆,当您将其分解为其组件(天,小时,分钟,秒,毫秒,刻度)时,属性给出值的一部分.

有了这些,您将获得每个类别的整数余数.因此,毫秒将始终在0到999之间(每秒毫秒数 – 1).
或者,另一个例子,如果你有72分钟,TotalMinutes是72,但是Minutes是12.

它与DecodeDateTime函数非常类似,可以分解TDateTime.

而对于你想要实现的目标,你肯定需要使用TotalMilliseconds属性,正如TridenT指出的那样,但GetMilliseconds的代码在TimeSpan中确实是正确的.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...