我的代码是var
t1,t2:TDateTime;
sum:double;
begin t1:=Now;
t1:=DateTimePicker1.Time;
sum:=(t2-t1)*24*3600;end;我用加断点跟踪,t1,t2都是很大的值,明显出错了
为什么?我感觉都正确阿
t1,t2:TDateTime;
sum:double;
begin t1:=Now;
t1:=DateTimePicker1.Time;
sum:=(t2-t1)*24*3600;end;我用加断点跟踪,t1,t2都是很大的值,明显出错了
为什么?我感觉都正确阿
解决方案 »
- 在sqlserver 2000中 如何在表EX2_TaskList中查找一条State为1的记录,将其State由1置2?
- delphi 用代码编辑version Info
- 数组的容量
- 请大家共同来帮我想想办法,非技术性问题!
- 请教FASTREPORT的frPrintGrid1打印DBGRID的用法,对了,谁有FASTREPORT的电子书,给我一份,E-MAIL:UV
- 子窗口如何关闭?
- 专家给我们带来了什么?
- 请教:如何把同一个程序中的所有窗体都显示在状态栏上,就象用IE打开一个新的页面一样的效果。
- 错误,郁闷错误,郁闷错误,郁闷错误,郁闷
- 请问在Delphi中怎样向服务器发请求(用什么组件或方法,协议为Http)
- 如何将ReportMachine编译为ActiveX控件。
- 发0分贴自己结,呵呵
我的代码是 var
t1,t2:TDateTime;
sum:double;
begin t1:=Now;
t2:=DateTimePicker1.Time;
sum:=(t2-t1)*24*3600; end; 我用加断点跟踪,t1,t2都是很大的值,明显出错了
为什么?我感觉都正确阿
那你t2-t1是不是想得到整数的天数差?
trunc(t2-t1)是得到天数差;其实算两个时间精确的时间差,用decodedate和decodetime把时间解开换算到秒,再算差值就可以了...
我的程序在运行到
t1:=Now;
就有错误,t1是一个很大的值
我如果再程序最后加上
showmessage(PChar(floattostr(sum)));
程序就计算正常,
如果把这就注释掉,t1和t2的取值错误
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;
不然t1和t2就是特别大或者特别小的值这是为什么
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
楼主可以大概手动算一下然后跟踪一下
得到的时间是一个浮点数,
t1取值正确的时候大概是39552.355393(这是在2008.4.14 8:30左右取得值)如果我把sum的输出语句注释掉,t1取值就错误了,是2.7760XXXXXe-308,这是一个非常小的数字,应该是系统给t1的初始值,而不是当前的时间这是一个简单的程序,你们可以把它拷贝以下,然后断电跟踪以下,
把showmessage(PChar(floattostr(sum))); 这句注释掉在跟踪以下就能看出问题了我想问的就是为什么会出现这种差异
t1:=Now;
t2:=DateTimePicker1.Time;
事实上都没有被执行楼上的正解
如果单单运行你的这段代码,没有发现有问题呀?
procedure TForm1.Button2Click(Sender: TObject);
var
t1,t2:TDateTime;
sum:double;
begin t1:=Now;
t2:=DateTimePicker1.Time;
sum:=(t2-t1)*24*3600;
end;
问题正如leeky和GenieWin 说的 因为没有使用sum 所以某些语句没有执行
结贴 散分 谢谢大家