我的代码是var
  t1,t2:TDateTime;
  sum:double;
begin t1:=Now;
t1:=DateTimePicker1.Time;
sum:=(t2-t1)*24*3600;end;我用加断点跟踪,t1,t2都是很大的值,明显出错了
为什么?我感觉都正确阿

解决方案 »

  1.   

    错了
    我的代码是 var 
      t1,t2:TDateTime; 
      sum:double; 
    begin  t1:=Now; 
    t2:=DateTimePicker1.Time; 
    sum:=(t2-t1)*24*3600; end; 我用加断点跟踪,t1,t2都是很大的值,明显出错了 
    为什么?我感觉都正确阿 
      

  2.   

    你的sum值是想得到单位为秒的值吗?
    那你t2-t1是不是想得到整数的天数差?
    trunc(t2-t1)是得到天数差;其实算两个时间精确的时间差,用decodedate和decodetime把时间解开换算到秒,再算差值就可以了...
      

  3.   

    不是  
    我的程序在运行到
    t1:=Now;  
    就有错误,t1是一个很大的值
      

  4.   

    更奇怪的是
    我如果再程序最后加上
    showmessage(PChar(floattostr(sum)));
    程序就计算正常,
    如果把这就注释掉,t1和t2的取值错误
      

  5.   

    uses
    DateUtils;procedure TForm1.Button1Click(Sender: TObject);
    var
    t1,t2:TDateTime;
    sum,sum2:double;
    begin
     t1:=now;
     t2:=DateTimePicker1.Time;
    sum:=HoursBetween(t1,t2);{相差的小时}
    sum2:=MinutesBetween(t1,t2);{两时间相差的分钟}
    edit1.Text:=floattostr(sum);
    edit2.Text:=floattostr(sum2);
    end;
      

  6.   

    我发现问题的根结是只要程序会将sum输出那么前边t1,和t2的取值就是正确的(逐步调适的时候看到的)
    不然t1和t2就是特别大或者特别小的值这是为什么
      

  7.   

    TDateTime如果不格式化(比如FormatDataTime函数)的话,是按照浮点数的格式来存储的:参考帮助文档
    In Delphi, TDateTime is a type that maps to a Double。浮点类型 (包括OS,以及其它语言应该也是类似的规则)The integral part of a Delphi TDateTime value is the number of days that have passed since 12/30/1899. The fractional part of the TDateTime value is fraction of a 24 hour day that has elapsed. 
    12/30/1899 是一个基数 ,整数部分是超过其的天数。小数部分是一天中已经过去的时间Following are some examples of TDateTime values and their corresponding dates and times:0 12/30/1899 12:00 am
    2.75 1/1/1900 6:00 pm
    -1.25 12/29/1899 6:00 am
    35065 1/1/1996 12:00 am  
    楼主可以大概手动算一下然后跟踪一下
      

  8.   

    我想问的是t1和t2的取值为什么是错误的
    得到的时间是一个浮点数,
    t1取值正确的时候大概是39552.355393(这是在2008.4.14 8:30左右取得值)如果我把sum的输出语句注释掉,t1取值就错误了,是2.7760XXXXXe-308,这是一个非常小的数字,应该是系统给t1的初始值,而不是当前的时间这是一个简单的程序,你们可以把它拷贝以下,然后断电跟踪以下,
    把showmessage(PChar(floattostr(sum))); 这句注释掉在跟踪以下就能看出问题了我想问的就是为什么会出现这种差异
      

  9.   

    是Delphi把你的代码优化掉了,因为你所计算的Sum又没用被应用.所以可能有些代码并未被执行.
      

  10.   

    Sum没有使用
    t1:=Now; 
    t2:=DateTimePicker1.Time;
    事实上都没有被执行楼上的正解
      

  11.   


    如果单单运行你的这段代码,没有发现有问题呀?
    procedure TForm1.Button2Click(Sender: TObject);
    var
      t1,t2:TDateTime;
      sum:double;
    begin t1:=Now;
    t2:=DateTimePicker1.Time;
    sum:=(t2-t1)*24*3600;
    end;
      

  12.   

    回楼上  如果单步跟踪 你会发现t1和t2的取值错误
    问题正如leeky和GenieWin 说的 因为没有使用sum  所以某些语句没有执行
    结贴 散分  谢谢大家