(long) timestamp in MySQL schreiben



  • Hallo!

    Ich habe einen timestamp vom Typ long und muss diesen in eine MySQL DB schreibe. Das ist soweit kein Problem, dies mache ich mit FROM_UNIXTIME("mein long Wert") und es wird autoamtisch als Datum in die DB gespeichert. Nun gibt es allerdings Probleme wegen der Zeitumstellung. Ich habe eine Liste von long-timestamps, die immer den gleichen Abstand haben, also z.B.:

    1200012040
    1200014040
    1200016040
    usw...

    wird es nun aber in der Datenbank gespeichert ist der Abstand wegen der Zeitumstellung nicht mehr immer gleich, sondern weicht an einer Stelle um eine Stunde ab, aber das darf nicht sein.

    Meine Überlegungen sind bisher: Entweder ich frage beim Einfügen der long-Werte in die Liste ab, ob es Sommerzeit oder Winterzeit ist und ziehe eine Stunde bzw. addiere eine Stunde dazu oder ich schreibe die Werte mit einer anderen Funktion in die Datenbank, wo es keine Zeitumstellung gibt. Aber ich weiss nicht so recht wie ich beides anstellen soll!

    Hat jemand Hilfe?



  • UTC (also befreit von Sommerzeit und Zeitzonen) abspeichern.



  • Tachyon schrieb:

    UTC (also befreit von Sommerzeit und Zeitzonen) abspeichern.

    Meinst Du in der DB oder bereits im C++ Teil?



  • Ich würde das, was in die DB geschrieben wird schon als UTC abspeichern. Dann bist Du den ganzen Ballast, den die Zeitzonen und die Umstellung mit sich bringen los und Deine Applikation kann für alle Zonen + W/S-Zeit immer das passende herleiten.



  • Dieser Thread wurde von Moderator/in evilissimo aus dem Forum C++ in das Forum Datenbanken verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.



  • Tachyon schrieb:

    Ich würde das, was in die DB geschrieben wird schon als UTC abspeichern. Dann bist Du den ganzen Ballast, den die Zeitzonen und die Umstellung mit sich bringen los und Deine Applikation kann für alle Zonen + W/S-Zeit immer das passende herleiten.

    Das Problem ist, dass ich ein Datum nur als long-Wert vorliegen habe, wie kann ich denn jetzt dem long-Wert sagen, dass er ein UTC-Wert darstellen soll? Thx! 🙂



  • Hmm, irgendwie blöd, dass der Beitrag jetzt im Datenbank Forum ist, schließlich hat die Frage eigentlich nichts mit Datenbanken am Hut! 😞



  • Kannst Du damit leben, dass die Zeitstempel in der DB ebenfalls als long vorliegen? Wenn Du nach Zeiträumen filtern willst, kannst Du ja vorher die Filterbedingung in UnixTimestamp umwandeln; Du könntest über die Tabelle auch noch eine View legen, welche die UnixTimestamps in 'human readable'-Zeitwerten anzeigt.



  • Nachdem ich nochmal alle Beiträge zu dem Thema gelesen und auch die MySQL Doku, bin ich zu dem Schluss gekommen, dass ich wohl in C++ selbst die timestamps anpassen muss (und dort extra größere Abstände einbaue, die dann später in der DB äquidistant angezeigt werden), weil ich die Zeitumstellung bzw. Zeitzonen global in der DB nicht ändern kann, da die DB von weiteren Programmen genutzt wird.

    Dazu frage ich die TimeZone ab. Ich denke dafür eignet sich die struct TIME_ZONE_INFORMATION. Allerdings habe ich noch nicht rausbekommen, wie ich damit zu einem Zeitstempel, als einem long-Wert, die dazugehörige Sommer- oder Winterzeit herausbekomme! Hat da jemand ein Tipp?



  • Schau' mal da hin. Vielleicht passt es.

    http://www.devx.com/cplus/10MinuteSolution/34030/1954


Anmelden zum Antworten