在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; 该代码假定您希望使用第二精度进行舍入.毫秒被丢弃. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |