(gelöst) Datumsformat TDateTime -> QDate?

Dein Thema passt einfach in kein Forum? Dann probiers mal hier.
Antworten
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

(gelöst) Datumsformat TDateTime -> QDate?

Beitrag 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:

Code: Alles auswählen

00000000 80D3E340
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
Zuletzt geändert von huckleberry am 17. April 2011 14:15, insgesamt 1-mal geändert.
padreigh
Beiträge: 340
Registriert: 13. Mai 2010 10:06

Beitrag von padreigh »

Patrick (QtCreator 1.3.1, Qt 4.6.3)
---
template = subdirs
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag von huckleberry »

Das kam mir auch in den Sinn, und dies hier:

Code: Alles auswählen

QDateTime::toMSecsSinceEpoch()
Aber einige Datensätze sind aus den 1960ern.. ?? Würde ja nicht gehen dann oder?
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Mehr Datumsbeispiele wären nicht schlecht. Außerdem, die Info ob die Uhrzeit auch darin enthalten ist.
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag 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.
kater
Beiträge: 306
Registriert: 29. Dezember 2009 01:13
Wohnort: Darmstadt

Beitrag 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.
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag 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.
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Mit der Google-Suche gefunden:
Delphi: Double-Wert mit Vorkomma als Tage seit 1899-12-30
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag von huckleberry »

upsala hat geschrieben:Delphi: Double-Wert mit Vorkomma als Tage seit 1899-12-30
Danke!
huckleberry
Beiträge: 115
Registriert: 2. Oktober 2010 17:07

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Optimieren könnte man noch mit einem reinterpret_cast.
Christian81
Beiträge: 7319
Registriert: 26. August 2004 14:11
Wohnort: Bremen
Kontaktdaten:

Beitrag von Christian81 »

Code: Alles auswählen

double dateDouble = *((double*)ba.data());
MfG Christian

'Funktioniert nicht' ist keine Fehlerbeschreibung
Antworten