falsche Uhrzeitangabe beim umwandeln von unixtimestamp

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

  • falsche Uhrzeitangabe beim umwandeln von unixtimestamp

    Hallo ich bin ziemlich neu in der Anwendungsentwicklung und habe den Auftrag bekommen eine Datenbank zu bereinigen.
    Soweit habe ich auch alle Fehler beseitigen können allerdings gibt es da von 4281 Datensätze genau 30 die mir Kopfzerbrechen bereiten.
    Es geht um ein var-Feld einer Tabelle in einer MySQL-Datenbank, darin ist ein Unixtimestamp gespeichert.
    Genau da liegt jetzt mein Problem, denn einer dieser Unixtimestamps lautet:
    624137400

    Laut MySQL
    Code:
    SELECT FROM_UNIXTIME(624137400)
    ist das Datum/Uhrzeit: 1989-10-11 21:30:00

    Laut Unixtime.de-Umrechner: 11.10.1989 - 20:30:00, was auch mit der Zeit übereinstimmt, welche für das Event an anderer Stelle der Datenbank per "Datetime" hinterlegt ist.
    Ich habe auch stundenlang Google und die hiesige SuFu bemüht, ohne eine Antwort zu finden.
    Ich wäre für ein wenig Hilfestellung wirklich dankbar.

  • #2
    FROM_UNIXTIME() liefert die Zeit in der akutell eingestellten Zeitzone. Wenn du eine andere möchtest, musst du diese angeben.

    Kommentar


    • #3
      Zitat von h3ll Beitrag anzeigen
      FROM_UNIXTIME() liefert die Zeit in der akutell eingestellten Zeitzone. Wenn du eine andere möchtest, musst du diese angeben.
      Okay, d.h. in der eingestellten Server-Zeitzone.
      Soviel ist mir jetzt klar, danke.
      Was mir aber immer noch nicht klar ist, warum spuckt er mir bei über 4000 Datensätzen mit FROM_UNIXTIME() die richtige Zeitangabe aus und nur bei 30! eine um 1 Stunde verschobene?
      Wäre das bei allen Datensätzen so, oder nur bei denen, bei denen der Timestamp nach Winter bzw Sommerzeit angelegt wurde, okay. Aber dem ist nicht so.

      Kommentar


      • #4
        Zitat von Rocktale Beitrag anzeigen
        Okay, d.h. in der eingestellten Server-Zeitzone.
        Soviel ist mir jetzt klar, danke.
        Was mir aber immer noch nicht klar ist, warum spuckt er mir bei über 4000 Datensätzen mit FROM_UNIXTIME() die richtige Zeitangabe aus und nur bei 30! eine um 1 Stunde verschobene?
        Kannst du auch Beispieldaten zeigen? Verschoben zu was? Mit was vergleichst du die Werte?

        Und in welcher Zeitzone läuft die Datenbankverbindung?

        Zu deinem zuerst geposteten Timestamp:

        20:30 wäre korrekt, wenn man von einer mitteleuropäischen Zeitzone ausgeht:

        PHP-Code:
        $dateTime = new DateTime();
        $dateTime->setTimezone(new DateTimeZone('Europe/Berlin'));
        $dateTime->setTimestamp(624137400);

        echo 
        $dateTime->format('r');
        // Wed, 11 Oct 1989 20:30:00 +0100 
        Hier Testcode am MySQL-Server:
        Code:
        mysql> SET time_zone = 'Europe/Berlin';
        Query OK, 0 rows affected (0.01 sec)
        
        mysql> SELECT FROM_UNIXTIME(624137400);
        +--------------------------+
        | FROM_UNIXTIME(624137400) |
        +--------------------------+
        | 1989-10-11 20:30:00      |
        +--------------------------+
        1 row in set (0.00 sec)
        Zuletzt geändert von h3ll; 19.07.2016, 14:45.

        Kommentar


        • #5
          Zitat von h3ll Beitrag anzeigen
          Kannst du auch Beispieldaten zeigen? Verschoben zu was? Mit was vergleichst du die Werte?
          Wie ich schon sagte:
          "Was mir aber immer noch nicht klar ist, warum spuckt er mir bei über 4000 Datensätzen mit FROM_UNIXTIME() die richtige Zeitangabe aus und nur bei 30! eine um 1 Stunde verschobene (Zeitangabe)?"

          Soll heißen er gibt mir auf meinem lokalen Server beim Timestamp "624137400" fälschlicherweise: 1989-10-11 21:30:00
          allerdings nur bei einigen Timestamps.
          Genau bei 30 von 4281.
          Zitat von h3ll Beitrag anzeigen
          Und in welcher Zeitzone läuft die Datenbankverbindung?
          Zu deinem zuerst geposteten Timestamp:

          20:30 wäre korrekt, wenn man von einer mitteleuropäischen Zeitzone ausgeht:
          Die eigentlich Datenbank liegt auf einem Hausinternen Server, dort wird die Umrechnung richtig gemacht, bei allen Datensätzen.
          Auf meinem lokalen Xamppserver, auf dem ich eine Kopie der Datenbank habe werden auch alle Timestamps richtig umgerechnet, bis auf diese 30 Timestamps.
          Das ist die Sache, die ich nicht verstehe, es liegt anscheinend schon an der Zeitzoneneinstellung allerdings steht bei beiden Servern nur "System" als
          Einstellung der Zeitzone, beide geben aber mit
          Code:
          SELECT CURRENT_TIME;
          dieselbe Zeit aus.
          Ist jetzt nicht mehr wirklich ein Problem, ich hätte es nur gern begriffen.

          Kommentar


          • #6
            Das ist jetzt nur eine Vermutung, ich hab es nicht nachgeprüft, aber IMHO ist das wieder so eine Windows-Geschichte. PHP und MySQL sind unter Windows nun mal sehr suboptimal. Irgendwas dürfte jedenfalls mit der Systemzeitzone schief laufen. Wenn man die Zeitzone in MySQL direkt setzt, dann liefert es die korrekte Werte (siehe mein MySQL-Beispiel).

            Kommentar


            • #7
              Okay, ich dachte es gibt da irgendetwas, dass ich übersehen hab.
              Ich danke dir jedenfalls vielmals für deine Mühen.

              Kommentar

              Lädt...
              X