.dbf (dBase) Timestamp konvertieren

Dieses Thema im Forum "Programmierung & Entwicklung" wurde erstellt von Prrovoss, 17. November 2013 .

  1. 17. November 2013
    hi,
    ich sitze gerade an einer für mich bisher unlösbaren aufgabe ich will eine .dbf datei in eine mysql datenbank überführen. das wäre soweit kein problem, wenn der timestamp(welcher für mich wichtig ist) nicht in so einem kryptischen format wäre... :

    Code:
    41594.722222222 - 16.11.2013, 17:20 3472222
    41594.725694444 - 16.11.2013, 17:25 3472223
    41594.729166667 - 16.11.2013, 17:30 3472222
    41594.732638889 - 16.11.2013, 17:35 3472222
    41594.736111111 - 16.11.2013, 17:40 3472222
    41594.739583333 - 16.11.2013, 17:45 3472223
    41594.743055556 - 16.11.2013, 17:50 3472222
    41594.746527778 - 16.11.2013, 17:55 3472222
    41594.75 - 16.11.2013, 18:00 3472222
    41594.753472222 - 16.11.2013, 18:05 3472222
    41594.756944444 - 16.11.2013, 18:10 3472223
    41594.760416667 - 16.11.2013, 18:15
    41594.763888889 - 16.11.2013, 18:20
    41594.767361111 - 16.11.2013, 18:25
    41594.770833333 - 16.11.2013, 18:30
    41594.774305556 - 16.11.2013, 18:35
    41594.777777778 - 16.11.2013, 18:40
    41594.78125 - 16.11.2013, 18:45
    41594.784722222 - 16.11.2013, 18:50
    das links sind die timestamps, wie sie in der dbf datei stehen und nach dem bindestrich dann das dazugehörige datum+uhrzeit. das ganz rechts habe ich mir nur mal notiert, das ist immer die differenz zwischen zwei timestamps (also 5 minuten).

    auf dieser seite habe ich schon einen hinweis gefunden:
    dBASE .DBF File Structure
    das kommt schonmal ungefähr hin, nur dass meine timestamps keine 8 byte lang sind^^
    wenn es dann allerdings an das tatsächliche umrechnen geht, komme ich nichtmehr weiter... wenn ich die zahl vor dem Punkt in jahre umwandel, kommen da 115 jahre raus, was quatsch ist.
    und für das umwandeln der zeit habe ich noch weniger ideen, da ich garnicht weiss, wie ich so eine berechnung, wie sie da beschrieben wird rückgängig machen kann^^

    jemand eine idee? ich habe inzwischen schon bestimmt 4 libraries ausprobiert, die auch alle funktionieren, allerdings wandelt mir keine diesen timestamp in ein ordentliches format um, da die der fieldType für alle felder in der dbf datei Numeric ist und die meisten libs so eine funktion garnicht erst implementieren, sondern einfach nur stumpf die daten auslesen können^^
     
  2. 17. November 2013
    Zuletzt bearbeitet: 17. November 2013
    AW: .dbf (dBase) Timestamp konvertieren

    Hallo Prrovoss!

    Bezüglich des Datums würde mir ein Workaround einfallen. Du weisst, dass der 16.11.2013 41594 ist. Wenn du eine neue Zahl bekommst, z.B. 43211, dann kannst du die Differenz zwischen 41594 und 43211 berechnen. Das sind (wahrscheinlich) die Tage zwischen dem 16.11.2013 und dem anderen Datum. Danach wandelst du den 16.11.2013 in ein bekanntes Timestamp-Format um und addierst bzw. subtrahierst die Tage. Am Ende hast du als Ergebnis das neue Datum.

    Bezüglich der Zeit hast du ja das Delta:
    Code:
    Delta(Zeit) = Delta(Einheiten)
    5 Minuten = (3472223 + 3472222) / 2 Einheiten
    1 Minute = 69444.5 Einheiten
    Du kannst jetzt die HH:MM nach Minuten umrechnen und mit dem Ergebnis der Rechnung oben multiplizieren. Das Ganze würde natürlich auch auf Sekundenbasis gehen.

    Leider wirst du wegen der Gleitkommazahl und den unterschiedlichen Deltas (372223 und 372222) wohl Probleme mit der Genauigkeit kriegen. Das könnte man vielleicht noch ausbügeln, wenn man ein Schema voraussetzt (z.B. jede Stunde wird um X Einheiten korrigiert). Die Zeit ist kein so einfaches Thema.

    Mfg,

    Kolazomai
     
    1 Person gefällt das.
  3. 17. November 2013
    AW: .dbf (dBase) Timestamp konvertieren

    hi,
    danke schonmal für die antwort, aber es scheint, als ob meine ganzen anstrengungen diesen timestamp zu verstehen überflüssig waren, da die doku von dbase einfach falsch ist :
    dBASE Web-News v.1.6.3

    auf der seite wird ein php code gegeben, der mir so einen timestamp in ein normales format umwandelt.
    leider hab ich mich mit php noch überhaupt nie beschäftigt und habe diesen code daher nich zum laufen gekriegt^^

    gibt es hier jemanden, der mir grob den quelltext übersetzen kann? ich bräuchte das ganze in java, aber mit dem unixTimestamp komm ich nich ganz klar^^
    ich hab schonmal versucht das per hand nachzurechnen, aber ich bin nich so wirklich auf ein brauchbares ergebnis gekommen :/
     
  4. Video Script

    Videos zum Themenbereich

    * gefundene Videos auf YouTube, anhand der Überschrift.