Сбивающий с толку из использования TTimeSpan в Delphi 2010

Я попробовал новый Тип записи TTimeSpan в Delphi 2010. Но я поощряю очень странную проблему.

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 (двойная точность) реализован правильно.

6
задан RRUZ 25 April 2011 в 02:15
поделиться

2 ответа

. сбивая с толку свойства, дающие общую сумму, выраженную в данной единице , со свойствами, дающими часть значения, когда вы разбиваете его на компоненты (дни, часы, минуты, секунды, миллисекунды, тики).

С их помощью вы получаете целочисленный остаток для каждой категории. Таким образом, Миллисекунды всегда будут находиться в диапазоне от 0 до 999 (количество миллисекунд в секунду - 1).
Или, другой пример, если у вас 72 минуты, TotalMinutes равно 72, а Minutes равно 12 .

Функция очень похожа на функцию DecodeDateTime для разбиения TDateTime .

И для того, чего вы хотите достичь, вам обязательно нужно использовать свойство TotalMilliseconds , как указал TridenT, но код для GetMilliseconds действительно правильный в TimeSpan .

7
ответ дан 10 December 2019 в 00:35
поделиться

Вы должны использовать TotalMilliseconds вместо свойства Milliseconds .

Так работает лучше!

assert(TTimeSpan.FromMilliseconds(5000).TotalMilliseconds = 5000); 

Из документации:

TotalMilliseconds Double
Промежуток времени выражается в миллисекундах и часть миллисекунд

3
ответ дан 10 December 2019 в 00:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: