Seite 1 von 1
(gelöst) Datumsformat TDateTime -> QDate?
Verfasst: 9. März 2011 13:09
von huckleberry
Hallo Foristen,
ich habe hier eine binäre Raw-Datei. Darin sind Datensätze einformatiert... Ich weiss welches Datum diese entsprechen, werde aber aus der Formatierung nicht schlauer
Beispielsweise entspricht der 02.03.2011 folgendes in der Datei als Hex:
Die ersten 4 Byte sind immer 0x00 und die kann ich auch ignorieren. Was sich im Datensatz immer ändert, sind die letzten 4 Byte.. Ich würde nun diese 0x80D3E340 einlesen.
Hat jemand einen Vorschlag? Ich bin dankbar für jeden Hinweis..
Mfg Huck
Verfasst: 9. März 2011 16:21
von padreigh
Verfasst: 9. März 2011 17:00
von huckleberry
Das kam mir auch in den Sinn, und dies hier:
Aber einige Datensätze sind aus den 1960ern.. ?? Würde ja nicht gehen dann oder?
Verfasst: 9. März 2011 19:20
von upsala
Mehr Datumsbeispiele wären nicht schlecht. Außerdem, die Info ob die Uhrzeit auch darin enthalten ist.
Verfasst: 9. März 2011 20:34
von huckleberry
Also hier mal ein 2 Beispiele:
40 F6 D3 40 == 18.12.1955
40 F8 D3 40 == 26.12.1955
Ich weiss nicht, ob die Uhrzeit mi teinkodiert ist, vermute eher weniger. Zu sehen ist die Uhrzeit auf jeden Fall nicht.
Verfasst: 10. März 2011 01:35
von kater
Gib mal alle Infos und mehr Beispiel. Mehere Tage hintereinander. Mich dünkt die 40 am Ende an. Die ist immer da selbst wenn das Jahr sich stark ändert.
Verfasst: 10. März 2011 11:13
von RHBaum
Gabs ned auch nen Datums/Uhrzeit-Format, was als fliesskommazahl (double / 8byte) intern dargestellt wurde ?
Dabei der Gebrochene Anteil die Stunden, und die ganzzahligen anteile die Tage seit xxx. Glaub unter windows war das ...
Gib mal mehr infos:
Welches BS laeuft das Prog was die Logs erzeugt ...
Ich hoffe nur das das Programm ned intern nen eigenen exotischen Datumstyp erzeugt !
Bist du in der Lage selber gezielt Datumseintraege im log zu erzeugen ?
Also beispielsweisse wir geben Dir 1.12.1995 vor und du sagst uns dann das dafuer im Log
00000000 60F4D390 stehen wuerde oder so ... ?
Ciao ...
Verfasst: 10. März 2011 22:44
von huckleberry
RHBaum hat geschrieben:
Gib mal mehr infos:
Welches BS laeuft das Prog was die Logs erzeugt ...
Windows. Die GUI sieht aus, als wäre sie mit Borland Delphi programmiert.
RHBaum hat geschrieben: Bist du in der Lage selber gezielt Datumseintraege im log zu erzeugen ?
Also beispielsweisse wir geben Dir 1.12.1995 vor und du sagst uns dann das dafuer im Log
00000000 60F4D390 stehen wuerde oder so ... ?
Ne die Daten hatte er net durch Benutzerineraktion gemaCht. Das hatte er sich selbst errechnet. Aber es war jedes Datum darstellbar. Ich als Benutzer kann also kein beliebiges Datum anzeigen lassen.
Ja hoffe auch das keine interne exotische Darstellung ist. Ich vermute sehr stark das dies ein Delphi typisches Format ist. Die Buttons sahen stark nach Delphi aus. (Kenn ich noch auis meiner Abizeit). Leider hab ich nur Linuxe und sowieso kein Delphi drauf.
Benutzt jemand zZ Delphi? Kennt sich gut aus u. Kann mal nachgucken.
Wär supeer. Danke im voraus.
Verfasst: 10. März 2011 23:38
von upsala
Mit der Google-Suche gefunden:
Delphi: Double-Wert mit Vorkomma als Tage seit 1899-12-30
Verfasst: 12. April 2011 14:24
von huckleberry
upsala hat geschrieben:Delphi: Double-Wert mit Vorkomma als Tage seit 1899-12-30
Danke!
Verfasst: 17. April 2011 14:15
von huckleberry
Falls jemand noch Delphi typische Datumsformate a la
TDateTime in Qt ein Qt lesbares Format umwandeln will:
Code: Alles auswählen
struct qba_double{
char c1;
char c2;
char c3;
char c4;
char c5;
char c6;
char c7;
char c8;
};
union Byte2Double{
qba_double b2d_b;
double b2d_d;
};
..dann hier benutzen:
Code: Alles auswählen
QDate YourClass::convertDelphi2Qt(QByteArray inQBA){
QByteArray retQBA = inQBA.mid(0, 8);
Byte2Double tt;
tt.b2d_b.c1 = retQBA.at(0);
tt.b2d_b.c2 = retQBA.at(1);
tt.b2d_b.c3 = retQBA.at(2);
tt.b2d_b.c4 = retQBA.at(3);
tt.b2d_b.c5 = retQBA.at(4);
tt.b2d_b.c6 = retQBA.at(5);
tt.b2d_b.c7 = retQBA.at(6);
tt.b2d_b.c8 = retQBA.at(7);
double g = tt.b2d_d;
QDate rQD = QDate(1899, 12, 30);
rQD = rQD.addDays((quint64)g);
return rQD;
}
Ich markiere es mal als gelöst, jedoch würde ich mich auch über jegliche Optimierung Vorschläe freuen!
Vielen Dank nochmal an upsala!
Gruß Huck
Verfasst: 17. April 2011 17:56
von upsala
Optimieren könnte man noch mit einem reinterpret_cast.
Verfasst: 17. April 2011 18:46
von Christian81