从注册表中取到的系统安装日期是一个10位的10进制数,如何将其转成DateTime类型
我用FileDatetoDateTime只有9位的10进制数才不会出错

解决方案 »

  1.   

    这是一个Unix Datetime格式
    procedure Time_T_to_FileTime (const time_in:DWORD ; const pft:PFILETIME);inline;
    var
      X:Int64;
    begin
      x := LongLong(time_in) * 10000000 + 116444736000000000;//$19db1ded53ea710;
      pft^.dwHighDateTime := DWORD((x shr 32) and $0ffffffff);
      pft^.dwLowDateTime := DWORD(x and $0ffffffff);
    end;function Time_T_2_DateTime (const time_in:DWORD ):TDateTime;inline;
    var
      ft: FILETIME;
      st: SYSTEMTIME;
    begin
      Time_T_to_FileTime(time_in,@ft);
      FileTimeToLocalFileTime(ft,ft);
      FileTimeToSystemTime(ft,st);
      Result := SystemTimeToDateTime(st);
    end;
    使用(假定注册表读出来的时间值是:1203249216):
    ShowMessage(FormatDatetime('yyyy-mm-dd hh:nn:ss',Time_T_2_DateTime(1203249216)));