请教:
procedure TForm1.Button1Click(Sender: TObject);
var
    MBetween:integer;
begin
     MBetween:=minutesBetween(strtodatetime('2006-4-21 11:05:00'),strtodatetime('2006-4-21 11:10:00'));
     showmessage(inttostr(MBetween));
     得到的结果是:4     而
     MBetween:=minutesBetween(strtodatetime('2006-4-21 11:10:00'),strtodatetime('2006-4-21 11:15:00'));
     showmessage(inttostr(MBetween));
     得到的结果是:5     这是怎么回事啊?     应该都是 5 啊?     谢谢!
end;

解决方案 »

  1.   

    我用Delphi7的结果是5和4。
    TDateTime = type Double;时间类型实际上是浮点数,浮点数运算是会出现误差的。
    function MinutesBetween(const ANow, AThen: TDateTime): Int64;
    begin
      Result := Trunc(MinuteSpan(ANow, AThen));
    end;
    经过Trunc这样来取整,误差就有1这么多了。
      

  2.   

    我用D6试了也是5,4...
    我不是用函数来做的,是自己写的,用来计算秒数的.而且我也不知道有这个函数.//计算秒数
    LoginTime := StrtoDateTime( '2006-04-20 10:10:10' );
    sStr := FormatDateTime( 'yyyy-mm-dd hh:mm:ss', Now()-LoginTime ); 
    I := StrToInt( FloatToStr( StrToDate( Copy( sStr, 1, 10 ) ) - StrToDate('1899-12-30') ) );//天数
    M := I * 60* 60 *24 + StrToInt( Copy( sStr, 12, 2 ) ) * 60 *60 +
                     StrToInt( Copy( sStr, 15, 2 ) ) * 60 + StrToInt( Copy( sStr, 18, 2 ) );好象是这样的,我忘了,你试一下看看.....如果你算的分钟数值超过65535的话.变量定义成longint