FormatDateTime()函数为何计算有误呢?(10分)

  • 主题发起人 主题发起人 sjm
  • 开始时间 开始时间
S

sjm

Unregistered / Unconfirmed
GUEST, unregistred user!
Access2000数据库有一个ft表,其中有一个rdsj字段(入店时间),内容为:2006-6-13 9:59:52,运行以下的简单过程为什么yzsj(已住时间)变量的内容会是:'1900年1月1日2小时xx分'呢?实际才2天多点的时间啊(按今天是15号计)。
var
dtTmp: TDateTime;
yzsj: string;
begin
with Adoquery1 do
begin
Close;
SQL.Clear;
SQL.Add('Select * from ft');
Open;
dtTmp := Now - FieldByName('rdsj').AsDateTime;
yzsj := FormatDateTime('y年m月d日h小时n分', dtTmp);
end;
end;
 
formatdatetime('y"年"m"月"d"日"h"小时"n"分"',dtTmp);
 
to 鳄鱼先生:
我试了一下,结果仍然是:'00年1月1日X小时X分',其中小时和分钟是对的,而月份、日期大错特错。
 
formatdatetime('yyyy"年"m"月"d"日"h"小时"n"分"',dtTmp);
 
两个小时和一个TDateTime的东西是不能比的,后者是个具体的日期+时间,它把你赋给他的时间转换为从一个基准时间开始的时间了
转换吧
 
to lqcros: 试了一下错误依旧。
to xygz: 怎么转换?
 
用sql server
 
老大,你相减了,而TDateTime是从1900年开始的,0就代表1899年的最后一刻!
TDatetime其实就是浮点数,整数部分代表据1900的天数。你一相减当然返回的就是从1900开始的时间了。如果求差值可以通过between系列函数
 
最简单的直接把年减去1900就ok了
 
其实我的本意就是想求出两个时间值之间到底相差多少小时多少分钟(一般不可能相差到多少年多少月的)。上面的dtTmp := Now - FieldByName('rdsj').AsDateTime;已经求出以实数形式的时间差值,如何进一步求出相差??小时??分钟来呢? 谢谢!
 
var
hh,mm,ss,ms:word;
decodeTime(dtTmp,hh,mm,ss,ms);
 
多人接受答案了。
 

Similar threads

S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
929
SUNSTONE的Delphi笔记
S
S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
后退
顶部