var dt1,dt2,dt3:TDateTime;
    n1,n2:Integer;
begin
    dt1:=EncodeDateTime(2005,2,17,16,34,0,0);
    dt2:=IncMinute(dt1);
    dt3:=EncodeDateTime(2005,2,17,16,35,0,0);
    n1:=MinutesBetween(dt1,dt2);
    n2:=MinutesBetween(dt1,dt3);
    ShowMessage(IntToStr(n1)+','+IntToStr(n2));
end;运行结果:1,0
为什么n1、n2不一样?

解决方案 »

  1.   

    結果是0,0;
    計算了一下,是數據在取整時出現的問題,MinutesBetween中是使用
    Double類型進行計算的,這樣是避免不了取整的問題,
      

  2.   

    delphi里日期时间是用double存储的
    整数部分是距离19xx年开始有多少天
    小数点后表示毫秒应该是这个原因
      

  3.   

    MinutesBetween是要取整,但dt2和dt3都是在dt1的基础上增加了一分钟,它们应该相同啊。它们与dt1计算分钟差也应该相同啊。在我的计算机上运行不同啊,你们怎么结果是0,0?
      

  4.   

    var dt1,dt2,dt3:TDateTime;
        n1,n2:Integer;
    begin
        dt1:=EncodeDateTime(2005,2,17,16,34,0,0);
        dt2:=IncMinute(dt1);
        dt3:=EncodeDateTime(2005,2,17,16,35,0,0);
        ShowMessage(BoolToStr((dt2=dt3),True));
    end;
    我运算的结果是False,为什么?
      

  5.   

    var dt1,dt2,dt3:TDateTime;
        d:Double;
    begin
        dt1:=EncodeDateTime(2005,2,17,16,34,0,0);
        dt2:=IncMinute(dt1);
        dt3:=EncodeDateTime(2005,2,17,16,35,0,0);
        d:=dt2-dt3;
        ShowMessage(FloatToStr(d));
    end;
    结果是什么呢?
      

  6.   

    var dt1,dt2,dt3:TDateTime;
        bt1,bt2:array[0..7] of byte;
    begin
        dt1:=EncodeDateTime(2005,2,17,16,34,0,0);
        dt2:=IncMinute(dt1);
        dt3:=EncodeDateTime(2005,2,17,16,35,0,0);
        Move(dt2,bt1,8);
        Move(dt3,bt2,8);
        Memo1.Lines.Add(Format('%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x',[bt1[0],bt1[1],bt1[2],bt1[3],bt1[4],bt1[5],bt1[6],bt1[7]]));
        Memo1.Lines.Add(Format('%.2x%.2x%.2x%.2x%.2x%.2x%.2x%.2x',[bt2[0],bt2[1],bt2[2],bt2[3],bt2[4],bt2[5],bt2[6],bt2[7]]));
    end;
    我的运行结果:
    1DC7711C16C0E240
    1CC7711C16C0E240
    你的结果是什么?