请问如何对当前时间值now()做四舍五入处理然后赋值给DateTime类型字段
例如,now() 为 2005-3-8 15:34 时,四舍五入处理后为 2005-3-8 15:30,并赋值给DataSet,
DataSet.FieldByName('szsj').AsDateTime:=四舍五入后的时间值请问各位如何做四舍五入呢,谢谢

解决方案 »

  1.   

    用DecodeTime过程把时间分离,然后用if语句就可以了
      

  2.   

    Minutes := StrToInt(FormatDateTime('nn',now));再 看看Minutes所在的区间 0--4 , 5--9 , 10--14 , 15--19 。55--59 再求差 xFieldByName('szsj').AsDateTime:=now+x/1440 或者 FieldByName('szsj').AsDateTime:=now+x/1440 ;
      

  3.   

    (1)Minutes := StrToInt(FormatDateTime('nn',now));(2)再 看看Minutes所在的区间 0--4 , 5--9 , 10--14 , 15--19 。55--59 再求差 x(3)FieldByName('szsj').AsDateTime:=now+x/1440 或者 FieldByName('szsj').AsDateTime:=now+x/1440 在(2)里 用div和mod 操作!!!!!!!
      

  4.   

    有一点麻烦的问题,注意一下:14:59----》15:00
    只要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时,日期要加一的问题。
      

  5.   

    procedure TForm1.Button2Click(Sender: TObject);
    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;
      

  6.   

    uses DateUtils;......procedure TForm1.Button1Click(Sender: TObject);
    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;
      

  7.   

    //重新修改如下:
    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;
      

  8.   

    (1)Minutes := StrToInt(FormatDateTime('nn',now));(2)再 看看Minutes所在的区间 0--4 , 5--9 , 10--14 , 15--19 。55--59 再求差 x(3)FieldByName('szsj').AsDateTime:=now+x/1440 或者 FieldByName('szsj').AsDateTime:=now-x/1440 在(2)里 用div和mod 操作!!!!!!!
      

  9.   

    laiqinghe(每天散10分 不接分)   到目前为止我还看不懂,X怎么求出来
      X/1440又是啥意思
      

  10.   

    (2)
    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  :)
      

  11.   

    //该死,回头一看,竟然看错题目,重新修改如下,只改变分钟,秒钟没有变
    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;