![]() |
TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Hallo Leute :),
beim erneuten Kompilieren eines Projekts mit XE2 ist mir eine seltsame Sache aufgefallen. Ausgangspunkt ist ein Kompilat desselben Projekts, einmal vom 01. März und einmal von heute. Beide Dateien liegen auf einem NTFS-Dateisystem. Das Kompilat vom 01. März:
![]() Hab ich was verpasst oder woher kommt die eine Stunde mehr? [EDIT] Die Angaben des TimeDateStamp hab ich einerseits mit einer eigenen Funktion und andererseits mit dem Tool ![]() [/EDIT] MfG Dalai |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Du bist auf die doofen Amerikaner hereingefallen:
California daylight savings time Start DST: Sonntag, 8. März 2015, 1 hour forward. Wahrscheinlich hast Du FALSCHE automatische Updates bekommen. Auf Deutschland bezogen wäre das dann UTC/GMT +2 hours. ![]() |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Zitat:
Zitat:
MfG Dalai |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
WOHER kommt dann die SYSTEMZEIT?
Gibt es einen TIMESERVER im Netzwerk? Wenn ich eine Funktion mit falschen Daten füttere (z.B. LocalDateTimeFromUTCDateTime(now) ), dann kommen natürlich falsche Daten heraus. |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Zitat:
Zitat:
Zitat:
Delphi-Quellcode:
Und vergleiche dessen Ausgabe mit dem Zeitstempel des Executable selbst, den man im Total Commander, Explorer oder woanders ablesen kann. Probier mal die Funktion selbst aus, vermutlich bekommst du dann auch zwei Stunden Abweichung, obwohl es laut Zeitzone GMT+1 nur eine sein dürfte.
{$IFDEF DELPHI2009_AND_UP}
{ The following two functions are (C) TOndrej @ StackOverflow http://stackoverflow.com/questions/8437300/how-can-i-automate-getting-the-date-of-build-into-a-constant-visible-to-my-code } function LinkerTimeStamp(const FileName: AnsiString): TDateTime; var LI: TLoadedImage; begin if NOT MapAndLoad(PAnsiChar(FileName), nil, @LI, False, True) then RaiseLastOsError; Result := LI.FileHeader.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta; UnMapAndLoad(@LI); end; //------------------------------------------------------------------------------ function LinkerTimestamp: TDateTime; begin Result := PImageNtHeaders(HInstance + PImageDosHeader(HInstance)^._lfanew)^.FileHeader.TimeDateStamp / SecsPerDay + UnixDateDelta; end; {$ENDIF} MfG Dalai |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Kleines Testprogramm:
Anzeige in Deutschland: Current universal time is: 15.03.2015 13:38:25 15.03.2015 14:38:25 (GMT+01) Current time is Standard. Was zeigt es bei Dir an?
Delphi-Quellcode:
program dates;
{$APPTYPE CONSOLE} uses SysUtils, DateUtils; begin { Writes the current universal time } WriteLn('Current universal time is: ', DateTimeToStr(TTimeZone.Local.ToUniversalTime(Now))); { Write the current date/time along with the abbreviation } WriteLn( Format('%s (%s)', [DateTimeToStr(Now), TTimeZone.Local.GetAbbreviation(Now, true)])); { Simply write the type of the current time } case TTimeZone.Local.GetLocalTimeType(Now) of lttStandard: WriteLn('Current time is Standard.'); lttDaylight: WriteLn('Current time is Daylight.'); lttInvalid: WriteLn('This should never happen when the time is coming from the system.'); lttAmbiguous:WriteLn('Current time is ambiguous.'); end; Readln; end. |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Zitat:
Code:
MfG Dalai
Current universal time is: 15.03.2015 13:42:01
15.03.2015 14:42:01 (GMT+01) Current time is Standard. |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Ich gebe es auf!
Ich denke, dass EMBA da Mist gebaut hat, denn bei älteren Compilaten ist der Timestamp = GMT, bei neueren Compilaten ist der Timestamp = GMT -1, was eine Differenz von 2 Stunden zu unserer Normalzeit = Standardzeit = Winterzeit GMT +1 bewirkt. |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
Es wurde auch umgebaut.
Früher stand die Zeit nicht im Image-Header, an der Stelle, wo es hingehört, sondern dort stand nur eine Magig-Number und der Wert stand wo anders. Jetzt steht es richtig drin (zumindestens die Stelle) |
AW: TimeDateStamp im IMAGE_FILE_HEADER unterschiedlich
@himitsu: Das ist mir klar, dass z.B. Delphi 5 noch einen konstanten Wert 20.06.1992 22:22 UTC als TimeDateStamp eingetragen hat. Aber darum geht es ja nicht, da die fraglichen Kompilate mit XE2 erzeugt wurden (wie bereits im OP erwähnt).
MfG Dalai |
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:58 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz