加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 大数据 > 正文

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

发布时间:2020-12-15 10:08:26 所属栏目:大数据 来源:网络整理
导读:在Delphi中是否存在一个例程,将TDateTime值舍入到最接近的第二,最接近的小时,最接近的5分钟,最近的半小时等等? 更新: Gabr提供了一个答案.有一些小的错误,可能是由于完全缺乏测试;-) 我清理了一下,并进行了测试,这是最后的(?)版本: function RoundDateTi
在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;

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读