在Delphi中:如何将TDateTime结合到最接近的秒,分钟,五分钟等?

前端之家收集整理的这篇文章主要介绍了在Delphi中:如何将TDateTime结合到最接近的秒,分钟,五分钟等?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在Delphi中是否存在一个例程,将TDateTime值舍入到最接近的第二,最接近的小时,最接近的5分钟,最近的半小时等等?

更新:

Gabr提供了一个答案.有一些小的错误,可能是由于完全缺乏测试;-)

我清理了一下,并进行了测试,这是最后的(?)版本:

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;

解决方法

像这样(完全未经测试,直接在浏览器中编写):
function RoundToNearest(time,interval: TDateTime): TDateTime;
var
  time_sec,int_sec,rounded_sec: int64;
begin
  time_sec := Round(time * SecsPerDay);
  int_sec := Round(interval * SecsPerDay);
  rounded_sec := (time_sec div int_sec) * int_sec;
  if (rounded_sec + int_sec - time_sec) - (time_sec - rounded_sec) then
    rounded_sec := rounded_sec + time+sec;
  Result := rounded_sec / SecsPerDay;
end;

代码假定您希望使用第二精度进行舍入.毫秒被丢弃.

猜你在找的Delphi相关文章