Datum in Binary abgelegt, wie kann ich es wieder convertieren?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Datum in Binary abgelegt, wie kann ich es wieder convertieren?

    Hallo,

    ich habe hier eine Datenbank in der der Zeitstempel binär abgelegt ist.
    Wenn ich die Tabelle in Excell extrahiere bekomme ich z.B. folgendes Datum:

    01C6C57CA9B84440

    Wie kann ich diese Information wieder in ein richtiges Datum umwandeln?

    Der obere Hexcode sollte etwa den 22.08.06 1:51:04 AM ergeben.

    Aber wie funktioniert das?

    Vielen Dank!

  • #2
    Re: Datum in Binary abgelegt, wie kann ich es wieder convertieren?

    Wie sind die Timestamps denn zu binären Strings geworden? (Und warum überhaupt Oo,)

    Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

    bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
    Wie man Fragen richtig stellt

    Kommentar


    • #3
      Ehm häääh?

      Das sind nie und nimmer Binärdaten. Binär --> Zweizuständig

      also entweder 1 oder 0.

      Da gibts keine Buchstaben drinne.

      Wenn dann sind das Hexdezimaldaten, aber auch das glaube ich nicht. Finde erstmal raus was für eine Zahl es ist und dann sag uns nochmal bescheid
      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

      Kommentar


      • #4

        01C6C57CA9B84440 in hex entspricht
        128006778640680000 in dec, wenn der win-calc nicht lügt.
        und das ist kein timestamp.

        werd mal konkreter. was steht in der tabelle? von welchem typ ist die spalte? wie kommt sie nach excel? was passiert dort?

        Kommentar


        • #5
          Hallo,

          also die Spalte hat den Typ Binary, Size: 8

          Wenn ich die Tabelle öffne bekomme ich in den Spalten auch nur <binary> angezeigt.

          Ich habe die Tabelle mittels DataExport nach Excel exportiert, und da bekomme ich dann diesen Hex-String.

          Die Daten in der Tabelle sind Ereignisse die Protokoliert wurden, wenn ich mir den ExcelExport ansehe, erkenne ich schon das, mit voran schreitendem Zeitpunkt der Ereignisse die Hexzahl größer wird, ich kann nur nicht erkennen welches System dahinter steckt.

          Wie der Timestamp zu diesem Hexcode geworden ist kann ich leider nicht nachvollziehen, da das Programm, welches in die Datenbank schreibt, nicht von mir ist.

          Hoffe ihr könnt mich jetzt eher verstehen.
          Zuletzt geändert von Oldfellow; 05.09.2006, 08:26.

          Kommentar


          • #6
            Die Formel um einen unix timestamp in ein Datum/Zeit zu verwandeln, lautet:
            =(x+((365*66+17)*86400))/86400 (siehe Google: excel unix timestamp). Um hex in dez zu verwandeln, gibt es die Funktion HEXINDEZ("maximal 40 bits") (siehe Excel-Hilfe). Aber heute ist etwa time= 1157444143, in hex 44FD322F . Du hast eine 64bit Zahl angegeben das ist kein üblicher timestamp. Um das System zu erkennen, müsste man einige Werte mit dem zugehörigen Datumswert haben.
            Zuletzt geändert von sternm; 05.09.2006, 12:51.

            Kommentar


            • #7
              Hast du mal noch ein paar von diesen codierten Daten?

              Mit Angabe, wo sie ungefähr landen sollen (also, mindestens, welches Jahr sie darstellen).
              ich glaube

              Kommentar


              • #8
                PHP-Code:
                <?php
                $mystery 
                '01C6C57CA9B84440';
                $formats = array('h','H','s','S','n','v',
                                
                'i','I','l','L','N','V','f','d');

                foreach (
                $formats as $f) {
                    echo 
                '<b>'.$f.'</b><br />';
                    foreach (
                unpack($f.'*'$mystery) as $v
                        echo 
                date('r'$v).'<br />';
                }
                ?>
                Ist da was dabei?

                Kommentar


                • #9
                  Hallo,

                  hier noch ein paar Paare:

                  01C67D32B5E29500
                  =
                  22.05.2006 2:00:18 AM


                  01C67D336251F420
                  =
                  22.05.2006 2:05:07 AM


                  01C67D53113C9B60
                  =
                  22.05.2006 5:51:55 AM


                  01C693F7A49A5220
                  =
                  20.06.2006 1:25:25 AM


                  01C6A6CF8E268CD0
                  =
                  14.07.2006 12:56:19 AM

                  Sorry aber mit dem letzten Beitrag kann ich leider gar nichts anfangen.

                  Kommentar


                  • #10
                    Also, ich hatte gerade mal Langeweile. Des Rätsels Lösung:

                    In dezimal umwandeln und durch 10000000 teilen und dann (warum auch immer) 134774 Tage davon abziehen.

                    PHP-Code:
                    $coded = array('01C67D32B5E29500''01C67D336251F420'
                    '01C67D53113C9B60''01C693F7A49A5220''01C6A6CF8E268CD0');

                    foreach(
                    $coded as $c) {
                         echo(
                    date("d.m.Y H:i:s A", (hexdec($c) / 10000000) - (134774*24*60*60)) . "<br>");

                    Falls einer weiß, was das nun für ein Format sein soll, mich würde es mittlerweile interessieren

                    gruß,
                    ministry
                    ich glaube

                    Kommentar


                    • #11
                      Hmmmm.. also auf jeden Fall hast du dir meinen Respekt damit verdient das du auf sone kranke Lösung kommst

                      Ich versuch mal 'ne Erklärung:

                      Der normale UNIX-Timestamp zählt ja die Sekunden vom 01.01.1970 um genau 1:00 morgens.

                      Da du nun rausgefunden hast, wie man das ganze berechnet mit dem komischen code, gehe ich folgerlich von folgendem aus: Die Zeitrechnung des Timestamps von Oldfellow beginnt erst 369,24383561643835616438356164384 Jahre (bzw. 134774 Tage) später als die vom UNIX-Timestamp. Dann bleibt noch das durch 10000000 teilen. Soweit ich weiß is das mit der gegeben Anzahl Nullen dort 10 Millionen. Eine Millionstel-Sekunde ist außerdem eine sog. Mikro-Sekunde.

                      Schlussfolgerung: Die Zeitrechnung wird also (außer das sie erst in ca. 340 Jahren beginnt) in 10mikrosekunden gemessen, anstatt in Sekunden.

                      Is doch unheimlich logisch oder?
                      Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                      Kommentar


                      • #12
                        So, du hast mich jetzt drauf gebracht. Google-Suche nach "134774 days" sagt auch schon was, und zwar u.a.:

                        Windows, however, is another story. Windows XP certainly has available a good implementation of NTP (how to install it), which will get the system time set accurately as we require (note that Windows XP has a built-in SNTP client, which can be set to run periodically in order to provide roughly-accurate time sufficient for typical home use). And the GetSystemTimeAsFileTime() call returns the current time in hectonanoseconds (100-nanosecond units) since 1601-01-01T00:00:00Z (11644473600 seconds before the start of the Unix epoch on 1970-01-01T00:00:00Z). Isn't this enough?
                        http://www.lochan.org/2005/keith-cl/...html#timingwin

                        Also wäre das ein hexadezimal gespeicherter Windows-Timestamp, der übrigens in Hektonanosekunden gemessen wird und dessen Zählung schon am 01.01.1601 beginnt .

                        Naja, hätten wir das geklärt
                        ich glaube

                        Kommentar


                        • #13
                          Hektonanosekunde = 10Mikrosekunden

                          das ganze is echt krank
                          Nur wenige wissen, wieviel man wissen muss, um zu wissen, wie wenig man weiß.

                          Kommentar


                          • #14
                            Und allem ist der Entwickler der Software schuld, welche diese Timestamps erzeugt. Selbst wenn er wegen OS-Abhängigkeit etc. keine andere Wahl hatte, als dieses Format zu nehmen, so hätte er das wenigstens ordentlich dokumentieren müssen!

                            Kommentar


                            • #15
                              Original geschrieben von onemorenerd
                              Und allem ist der Entwickler der Software schuld, welche diese Timestamps erzeugt. Selbst wenn er wegen OS-Abhängigkeit etc. keine andere Wahl hatte, als dieses Format zu nehmen, so hätte er das wenigstens ordentlich dokumentieren müssen!
                              (na ich denke mal der TO hat keinen Zugriff auf den Code, oder? Sonst hätte man da ja mal einen Blick reinwerfen können und wäre wahrscheinlich von selbst drauf gekommen ... und in ein Manual würde ich auch nicht schreiben wie das Timestamp-Format in der Datenbank ist )

                              Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                              bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                              Wie man Fragen richtig stellt

                              Kommentar

                              Lädt...
                              X