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 (倍精度) が正しく実装されています。