![]() |
C++ DateTime in Delphi TDateTime umwandeln.
Hi,
ich habe folgenden Wert aus einer Datei ausgelesen: 12879544607645573 Dieser Wert soll das Erstellungsdatum eines Eintrags der Datei darstellen. Ich vermute das es sich hier bei um einen DateTime-Wert handelt. Die Software mit der die Datei erstellt wurde, ist in C++ geschrieben. Ein Auszug aus dem MSDN: Zitat:
TDateTime wird in der Delphi-Hilfe so beschrieben: Zitat:
|
Re: C++ DateTime in Delphi TDateTime umwandeln.
Mein bisheriger Ansatz:
Und wie gehts weiter? Hmm.. ein Mathe-Genie war ich noch nie. Stecke irgendwie fest... |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Hallo Andreas L.
12879544607645573 = Datum/Zeit. Welches Datum/Uhrzeit soll dieser Wert repräsentieren? Hast Du die passenden Werte von Datum/Uhrzeit? Bis bald Chemiker |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Zitat:
|
Re: C++ DateTime in Delphi TDateTime umwandeln.
OK, ich hab jetzt weitere Infos. Es scheint sich um das von Webkit verwendet Datumsformat zu handeln:
Zitat:
EDIT: Ich hab mir jetzt mal die UnixToDateTime-Routinen angesehen und ein bisschen gebastelt:
Delphi-Quellcode:
Funktioniert leider nicht:
const
WebKitTimeDelta = 256036; //Tage zwischen 31.12.1899 und 01.01.1601 (glaube der Wert ist falsch) ... ... function DateTimeToWebKitTime(const AValue: TDateTime):Int64; begin Result := Round((AValue - WebKitTimeDelta) * MSecsPerDay); end; function WebKitTimeToDateTime(const AValue: Int64):TDateTime; begin Result := AValue / MSecsPerDay + WebKitTimeDelta; end;
Delphi-Quellcode:
Wert von Edit2: 12884278663641352
DateTimePicker3.DateTime := WebKitTimeToDateTime(StrToInt64(Edit2.Text));
Debugger zeigt als Ergebnis von WebKitTimeToDateTime: 149379631,64 DateTimePicker3 verändert sich aber nicht |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Keiner eine Idee?
|
Re: C++ DateTime in Delphi TDateTime umwandeln.
Zitat:
ohne garantiert korrekte Wertepaare, anhand derer man die Umwandlungssoftware prüfen könnte, lohnt sich das Nachdenken nicht wirklich. Gruss Reinhard |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Zitat:
EDIT: Die Werte werden vom Google Chrome Browser in der Cookies-Datei im UserData-Verzeichnis abgespeichert. Ich hab auch schon den Chromium Code geladen, finde aber die entsprechende Stelle im Code nicht. Ist auch ziemlich umfangreich... |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Zitat:
braucht man alles nicht: gewünscht ist CppTime * mul + add = DelphiTime 1 Tag hat 864000000000 ticks (100ns), also (CppTime + 864000000000) * mul + add = DelphiTime + 1 -> das sind 2 Gleichungen mit 2 Unbekannten, daraus ergibt sich mul = 1/864000000000 und add = 25007,330053825741741 finally: DT := CT / 864000000000 + 25007,330053825741741 natürlich mit int64 und extended zu rechnen. Gruss Reinhard |
Re: C++ DateTime in Delphi TDateTime umwandeln.
Zitat:
hat mich nicht befriedigt - ist zwar mathematisch schon das, was du wolltest, aber eigentlich sollte add ganzzahlig sein (Tage). Eine genauere Zahlenanalyse ergab, dass Webtime ab 1601 richtig ist und dass UTC rauskommt - du hast aber in deinen Zahlenpaaren zuerst MEZ und dann MESZ angegeben. Korrekt logisch abgeleitet muss es daher heissen: DelphiTime := WebTime / 86400000000 {µs} - 109205 {Tage 1601 - 1899} + (MEZ - UTC | MESZ - UTC) {für GER} Gruss Reinhard |
Alle Zeitangaben in WEZ +1. Es ist jetzt 03:33 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 by Thomas Breitkreuz