В Delphi: как округлить значение TDateTime до ближайшей секунды, минуты, пяти минут и т. Д.?

Существует ли в Delphi процедура, которая округляет значение TDateTime до ближайшей секунды, ближайшего часа, ближайших 5 минут, ближайшие полчаса и т. д.?

ОБНОВЛЕНИЕ:

Габр дал ответ. Были небольшие ошибки, возможно, из-за полного отсутствия тестирования; -)

Я немного почистил и протестировал, и вот финальная (?) Версия:

function RoundDateTimeToNearestInterval(vTime : TDateTime; vInterval : TDateTime = 5*60/SecsPerDay) : TDateTime;
var
  vTimeSec,vIntSec,vRoundedSec : int64;
begin
  //Rounds to nearest 5-minute by default
  vTimeSec := round(vTime * SecsPerDay);
  vIntSec := round(vInterval * SecsPerDay);

  if vIntSec = 0 then exit(vTimeSec / SecsPerDay);

  vRoundedSec := round(vTimeSec / vIntSec) * vIntSec;

  Result := vRoundedSec / SecsPerDay;
end;
13
задан Svein Bringsli 8 November 2010 в 17:10
поделиться