请问如何对当前时间值now()做四舍五入处理然后赋值给DateTime类型字段
例如,now() 为 2005-3-8 15:34 时,四舍五入处理后为 2005-3-8 15:30,并赋值给DataSet,
DataSet.FieldByName('szsj').AsDateTime:=四舍五入后的时间值请问各位如何做四舍五入呢,谢谢
例如,now() 为 2005-3-8 15:34 时,四舍五入处理后为 2005-3-8 15:30,并赋值给DataSet,
DataSet.FieldByName('szsj').AsDateTime:=四舍五入后的时间值请问各位如何做四舍五入呢,谢谢
只要DecodeTime(now...,取出Hour,Min,怎样处理都行。
var
Hour, Min, Sec, MSec: Word;
DecodeTime(now, Hour, Min, Sec, MSec);
if Min>55 then
begin
inc(Hour);
Min:=0;
end else
Min:=Round(Min/10)*10;DataSet.FieldByName('szsj').AsDateTime:=GetDate+EncodeTime(Hour,Min,Sec,MSec);/////////////////
还要考虑当大于23:55时,日期要加一的问题。
var
M,j : integer;
t : Tdatetime;
s : String;
begin
s:= '2005-03-08 8:28:58';
t:=Strtodatetime(s);
s:=Formatdatetime('ss',t);
M:=Strtoint(Formatdatetime('ss',t));
if M>=30 then
s:=Formatdatetime('YYYY-MM-DD hh:mm:ss',IncMinute(t));
showmessage(s);
end;
var
YourTime: Tdatetime;
strDT, strSec: String;
begin
strDT := Copy(Formatdatetime('YYYY-MM-DD hh:mm:ss',Now),1,17);
strSec := Copy(Formatdatetime('YYYY-MM-DD hh:mm:ss',Now),18,2);
StrDT := StrDT + FormatFloat('#00',Trunc(StrToFloat(strSec)/10.0)*10);
YourTime := StrToDateTime(StrDT);
showmessage(DateTimeToStr(YourTime));
end;
var
YourTime: Tdatetime;
strSec: String;
oneSec: double;
N: Integer;
begin
oneSec := StrToTime('00:00:01'); //记录一秒钟的值
strSec := Copy(Formatdatetime('YYYY-MM-DD hh:mm:ss', Now),19,1); //获取秒个位 if StrToInt(strSec) >= 5 then
N := 10
else
N := 0; YourTime := StrToDateTime(Copy(Formatdatetime('YYYY-MM-DD hh:mm:ss',
Now),1,18) + '0') + oneSec * N; showmessage(Formatdatetime('YYYY-MM-DD hh:mm:ss',YourTime));
end;
X/1440又是啥意思
var
mm_ten,mm_one,minute1:integer;//秒的十位数 秒的各位数mm_ten:=Minutes div 10;
mm_one:=Minutes mod 10;if mm_one>4 then
minute1:=(mm_ten+1) * 10 x=minute1-minute;//明白了吗 ???? FieldByName('szsj').AsDateTime:=now+x/1440 //x可能是负数 这一句就够了//*******************************************以上是对于(2)步的解释 代码自己优化吧 《X/1440又是啥意思一天是86400秒 1440分钟 在日期上加 1 就等于 加了一天 所以 在进行运算的时候 例如:1秒=1/86400 :)
var
strMin: String;
oneMin: double;
begin
oneMin := StrToTime('00:01:00'); //记录一分钟的值
strMin := Copy(Formatdatetime('YYYY-MM-DD hh:mm:ss', Now),16,1); //获取分钟的个位 if StrToInt(strMin) >= 5 then
DataSet.FieldByName('szsj').AsDateTime := Now + (10 - StrToInt(strMin)) * oneMin
else
DataSet.FieldByName('szsj').AsDateTime := Now - StrToInt(strMin) * oneMin;
end;