日期相加问题,急~~(100分)

  • 主题发起人 主题发起人 乖乖鱼
  • 开始时间 开始时间

乖乖鱼

Unregistered / Unconfirmed
GUEST, unregistred user!
小弟做个小程序,其中有2个字段用到日期型,表如下:
fno fbillno fitemnumber fusetime fstarttime ffinishtime
001 WK00001 010.0001-00 3800 2006-08-11 10:00 ?
........
ffinishtiem=fstarttime+fusetime,其中fusetime是int型,ffinishtime是datetime型。
知道SQL有个dateadd可以用,但类型之间怎么处理老是出错,请问如何得到结果?用SQL语句或用Delphi都行。
 
fusetime 的值是什么?
比如你给出的3800表示什么?
 
3800是用时,以秒为单位的
 
如果那个3800是天,则按下面计算,如果是秒,则把ffinishtime:=fstarttime+fusetime;换成ffinishtime:=fstarttime+fusetime/(24*3600);

var
fstarttime,ffinishtime:tdatetime;
fusetime:integer;
begin
fstarttime:=strtodatetime('2006-08-11 10:00');
fusetime:=3800;
ffinishtime:=fstarttime+fusetime;
showmessage(datetimetostr(ffinishtime));
end;
 
to:weiliu:
我不是只看结果,要自动计算的,如果只是看不用这么多语句,
select dateadd(ss,fusetime,fstartime)as ffinishtime 就可以了,但这样在delphi无法通过的
 
var
tUsetime,tFinishtime:tDatetime;
begin
tUsettime = 3800/60/60/24;
tFinishtime = fStartTime+tUsetime;
end;
Delphi中时间类型可当作浮点型,整数1代表1天,所以1秒就相当于1/60/60/24。
SQL Server中也类似,但其基础时间与Delphi相差1天,即0所代表的日期与Delphi相差一天。可以formatdatetime('yyyy-mm-dd hh:nn:ss',0)来验证。
SQL Server中可以直接这么写SQL语句:
Update TableName set fFinishtime = fStartTime + fUseTime/60/60/24
可以直接计算结束时间
 
HunterTeam说的很清楚了
 
to 乖乖鱼,
我那个程序是给个结果给你看,但是中间的计算过程你就看不见了?
 
update table3 set ffinishtiem=dateadd(ss,fusetime,fstarttime)不行吗
 
我在ms sql加上一下计算字段就自动实现了你的要求。
([fstartime] + [fusetime] / 24.0 / 3600.0)
其实就是把秒钟换算成天。
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
2K
DelphiTeacher的专栏
D
D
回复
0
查看
1K
DelphiTeacher的专栏
D
后退
顶部