Standardmäßig gibt es in den
PE-Headern der EXE ein Feld für dieses Datum.
Leider stand da nie ein Datum drin, sondern nur eine (von irgendwem) sogenannte Delphi-Magic-Time, also ein bestimmert fester Wert.
Wenn dieser Delphi-Magic-Time gefunden wird, dann sucht der Code an einer anderen Stelle nach der gewünschten Zeit (zum Glück hat Delphi einen Datums-Wert da abgelegt). Wird keine Delphi-Magic-Time gefunden, dann wird diese Zeit als Compile-Time genommen (so wie es eigentlich von Microsoft geplant war).
Die DDevExtensions schreiben bestimmt die CompileTime in das "richtige" Feld mit rein.
"Leider" kann ich das hier nicht direkt prüfen, was die DDevExtensions machen (aber im Notfall kann Andy das ja aufklären),
da Delphi 2010 anschinend die Compile-Time nun endlich in der richtigen Stelle einträgt.
Zitat:
// FIXME: Borland's linker uses the local system time
// of the user who linked the executable image file.
// (is that information anywhere?)
Und diese Zeitverschiebung lößt sich leider nicht vermeiden,
da Delphi leider die lokale Zeit da einträgt.
Man könnte nun zwar über
LocalFileTimeToFileTime/
FileTimeToLocalFileTime dieses umrechnen (direkt nach DosDateTimeToFileTime), aber da man nicht rausfinden kann, in welcher Zeitzone sich der Compiler befand, ist es besser dieses zu belassen, anstatt diese Abweichung eventuell noch mehr zu verfälschen.