Ich benutze Windows.GetFileTime. Diese Funktion liefert eine Zeit ab 1601 mit einer Auflösung von 100ns. Allerdings muss man sich da zunächst einen ganzen Wald von Funktionen drum herum bauen, weil die Funktion zunächst mal die Zeit als UTC liefert. Die Zeit muss zunächst in die lokale Zeit umgerechnet werden. Danach kann man mit FiletimeToSystemTime die Zeit in ein brauchbares Format umwandeln. Systemtime ist ein Record welches Tag,Monat,Jahr usw. enthält. Damit kann man dann ganz gut weiterarbeiten.
Die Funktionen die bei Delphi benutzt werden, stammen noch aus DOS-Zeiten (bzw. sind dazu kompatibel) und sind schon seit Jahrzehnten veraltet.
Delphi-Quellcode:
var
FileAge: TFiletime;
SystemTime: TSYSTEMTIME;
begin
GetFileTime(
Handle,
nil,
nil, @FileAge);
FileTimeToLocalFileTime(FileAge, FileAge);
FiletimeToSystemTime(FileAge, SystemTime);
EncodeDate(SystemTime.wYear, SystemTime.wMonth, SystemTime.wDay);
...
end;