我同步服务器时间如下:
var 
  uLastSyncTimeWithServer : double; // last synchronize time with server.
  uLastSyncTimeWithServer : double; // interval time between work station and serverfunction ngGetServerTime: TDateTime;
begin
  if abs(Now - uLastSyncTimeWithServer) > 1/24 then begin
    with ClientRunQuery('SELECT GETDATE()') do try  //客户端运行取服务期时间
       uIntervalTimeWithServer := Now - Fields[0].AsFloat;
       uLastSyncTimeWithServer := Now;
    finally
      Free;
    end;
  end;
  Result := Now - uIntervalTimeWithServer;
end;保存时
      ...
      FieldByName('SysLMDate').AsDateTime     := ngGetServerTime;
      Post;
现在的问题是有的部分客户保存的时间为1899-12-30 0:00:27。
求各位高人指点小弟,一般情况下都是正常的,但是有这个情况出现,我想哪里有问题,自己想了半天没想通,是不是客户自己的系统时间有问题?谢谢

解决方案 »

  1.   

    如果客户这样输入结果就是这样
    还有一种情况,就是在Delphi中只输入时间,但SQL数据库在保存的时候,会自动加上这个最小的日期 
     
      

  2.   

    时间格式要看sql数据库的设定,有时要做时区转换的
      

  3.   

    数据库中是datetime类型的,我这里取时间没有客户输入的部分呀
      

  4.   

    先看下“Fields[0].AsFloat”的值是什么?再看下NOW的返回的浮点值是多少?
      

  5.   

    我这段代码,基本上都是正确的,只有一家客户发生这个情况,至于fileds[0].asfloat返回的就是服务器的时间如28/11/2011 18:20:05的浮点数,感觉不是这个问题
      

  6.   

        我感觉是不是这里有问题,当客户端自己的系统时间为0,系统会运行if begin。。end条件uLastSyncTimeWithServer = now,也是0。虽然这次的result是为正常的系统时间。但是下次再更新时,if条件为假,直接运行result得到结果为now - 0 = 0。客户端再次更新保存时,就是0.
        但是这里的问题是if条件为假是什么情形?还有就是保存时间不是为0呀,还有几秒时间的。对时间转为浮点数不是很熟悉,求大神给个提示。。
      

  7.   

    我上面说错了,if条件是判断时间间隔为1个小时,还是讲不通,如果间隔1个小时以上,就会运行if,就会是得到与服务器时间间隔,结果就会得到服务器时间。结果和now没有关系的。郁闷