比如这个时间值是:1133936568
如果转换过来应是:2005-12-7 14:22:48我的代码转换成了:2005-12-7 6:22:48
差了8个小时,汗代码如下:function GetTime(N:DWord): string;
var
  BaseTime:TDateTime;
  BS,DS,a:TTimeStamp;
begin
  BaseTime:=EncodeDate(1970,1,1)+EncodeTime(0,0,0,0);
  BS:=DateTimeToTimeStamp(BaseTime);
  DS.Time:=(N mod (60*60*24))*1000;
  DS.Date:=N div (60*60*24);
  a.Time:=BS.Time+DS.Time;
  a.Date:=BS.Date+DS.Date;
  result:=DateTimeToStr(TimeStampToDateTime(a));
end;procedure TForm1.Button1Click(Sender: TObject);
begin
  showmessage(gettime(1133936568));
end;怎么办?

解决方案 »

  1.   

    //这个函数获取本机所在地区的时区,你转换后加上这个函数的返回值就正确了
    function GetGMTBias: Integer;
    var
      info: TTimeZoneInformation;
      Mode: DWord;
    begin
      Mode := GetTimeZoneInformation(info);
      result := info.Bias;
      case Mode of
        TIME_ZONE_ID_INVALID: RaiseLastOSError;
        TIME_ZONE_ID_STANDARD: result := result + info.StandardBias;
        TIME_ZONE_ID_DAYLIGHT: result := result + info.DaylightBias;
      end;
    end;
      

  2.   

    你转换后加上这个函数的返回值就正确了
    ------------------------------------
    加在哪里?
    a.Time:=BS.Time+DS.Time+GetGMTBias;?
    或者
    a.Date:=BS.Date+DS.Date+GetGMTBias;?
    可惜都没有得到我所要的!
    还有哪里可加?
      

  3.   

    Result := DateTimeToStr(IncHour(TimeStampToDateTime(a), 8));
      

  4.   

    这应该不关时区的事情吧,用另一个方法实现出来也是2005-12-7 6:22:48。uses DateUtils;function GetTime(N:DWord): string;
    var
      BaseTime:TDateTime;
    begin
      BaseTime:=EncodeDateTime(1970,1,1,0,0,0,0);
      Result:=DateTimeToStr(IncSecond(BaseTime,N));
    end;
      

  5.   

    多谢大家热心帮忙啊!thx1180直接跟我加了8个小时,呵呵,真有你的!
    alexanda2000的代码果然比偶的简单多了,呵呵,难道1133936568就是2005-12-7 6:22:48吗?怀疑ing...这个1133936568值是我用ReadEventLog函数读出来的,在事件查看器里面显示的是2005-12-7 14:22:48,可是我取得的就是1133936568转过来就成了2005-12-7 6:22:48,郁闷呀