起步软件技术论坛-X3

 找回密码
 立即注册
搜索
查看: 152|回复: 6

[搞定][请求]奇怪,hoursbetween函数计算的小时差有问题,不知怎么解决**

[复制链接]
发表于 2007-10-10 09:23:48 | 显示全部楼层 |阅读模式
当我在表达式编辑器中,使用hoursbetween函数计算当天23点整到第二天1点整的小时差,结果变成了1小时,但是计算23:15~第二天1:15的小时差,结果是2小时,这又是对的,不明白,怎么回事????

a.gif

360.65 KB, 下载次数: 102

回复

使用道具 举报

发表于 2007-10-10 10:54:07 | 显示全部楼层
平台的这个函数是调用的Delphi的HoursBetween函数,Delphi在这方面有缺陷。
你可以用一个计算字段然后自己写函数计算
也可以用数据库的函数,参考这个
procedure TYWXX1.FIELD_ZDYSJJ1_SC2CalcField(Field: TBizField; var Value: Variant);
var
  lQuery: TQuery;
  lrq1,lrq2: string;
begin
  lQuery := TQuery.Create(nil);
  try
    lrq1 := DataSetZDYSJJ1.FieldByName('rq1').AsString;
    lrq2 := DataSetZDYSJJ1.FieldByName('rq2').AsString;
    lQuery.ConnectionString := 'DATABASEURL=Biz:\LSBCSKJ\lsbSJK.Database';
    lQuery.CommandText := 'select datediff(hh,'''+lrq1+''','''+lrq2+''') sc';
    lQuery.Open;
    value := lQuery.Fields[0].AsInteger;
  finally
    lQuery.Free;
  end;

end;
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-10 11:11:53 | 显示全部楼层
用minutebetween函数看了一下分钟差,发现23点整到1点整的分钟竟然是119分钟,差了1分钟,终于知道为什么算小时差会少1个小时的原因了
回复 支持 反对

使用道具 举报

发表于 2007-10-10 11:19:55 | 显示全部楼层
日期类型在Delphi中是存储为浮点数的 TDateTime = Double
整数部分表示日期,小数部分表示时间
2007-10-9 23:00
转换成日期类型以后,整数是39364  小数部分是23*1/24 是一个无限循环小数
得到的结果是39364.958333
返算回去就是2007-10-9 22:59:59 9712
这里出现误差了
回复 支持 反对

使用道具 举报

发表于 2007-10-10 11:22:57 | 显示全部楼层
再看看Delphi中的这个函数是怎么写的
function HoursBetween(const ANow, AThen: TDateTime): Int64;
begin
  Result := Trunc(HourSpan(ANow, AThen));
end;

function HourSpan(const ANow, AThen: TDateTime): Double;
begin
  Result := HoursPerDay * SpanOfNowAndThen(ANow, AThen);
end;

function SpanOfNowAndThen(const ANow, AThen: TDateTime): TDateTime;
begin
  if ANow < AThen then
    Result := AThen - ANow
  else
    Result := ANow - AThen;
end;

两个浮点数相减,然后乘以24,取整
问题就出在取整上了,浮点运算本来就有误差,直接取整肯定就有问题了
这里应该判断一个范围,而不是简单的取整
就是说如果0.9999可以认为是1,但是0.98就要认为是0了
回复 支持 反对

使用道具 举报

 楼主| 发表于 2007-10-10 15:15:42 | 显示全部楼层
因为只需要看日期和小时、分钟,不需要秒数,于是我把时间加了1秒,发现好像暂时可以解决问题了,MinutesBetween(开始时间,IncSecond(结束时间,1))
回复 支持 反对

使用道具 举报

发表于 2007-10-10 15:27:09 | 显示全部楼层
:thumbsup:
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Justep Inc.

GMT+8, 2025-6-28 19:06 , Processed in 0.047339 second(s), 18 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表