¿Cómo convertir una fecha de tipo TFileTime a tipo TDateTime?

Convirtiendo fechas en formato TFileTime a TDateTime

Copyright © 2000 Ernesto De Spirito

Storage Library - Guarde la configuración de su aplicación

El campo FindData de TSearchRec, el registro usado por FindFirst y FindNext para obtener las entradas de un directorio, es otro registro que entre otra información (como por ejemplo el nombre corto y el nombre largo del archivo) tiene tres campos que representan las horas de creación, último acceso y última escritura (ftCreationTime, ftLastAccessTime, ftLastWriteTime respectivamente). Estos tres campos están declarados como TFileTime, un tipo que representa fechas de 64 bits en Tiempo Universal Coordinado (UTC).

Si desea convertir esos valores a TDateTime, puede usar la siguiente función:

uses Windows;

function FileTime2DateTime(FileTime: TFileTime): TDateTime;
var
  LocalFileTime: TFileTime;
  SystemTime: TSystemTime;
begin
  FileTimeToLocalFileTime(FileTime, LocalFileTime);
  FileTimeToSystemTime(LocalFileTime, SystemTime);
  Result := SystemTimeToDateTime(SystemTime);
end;

Llamada de ejemplo:

procedure TForm1.Button1Click(Sender: TObject);
var
  sr: TSearchRec;
begin
  if FindFirst(Application.ExeName, faAnyFile, sr) = 0 then
  begin
    ShowMessage(DateTimeToStr(
      FileTime2DateTime(sr.FindData.ftLastWriteTime)));
    FindClose(sr);
  end;
end;

Puede encontrar el código fuente completo de este artículo en el archivo que acompaña al Boletín Pascal #21.

JfControls Library - para Delphi y C++ Builder