Sommer- oder Winterzeit aus Zeitstempel erkennen



  • Hallo zusammen,

    ich muss zukünftig Messwerte in eine Datenbank überführen. Die Messwerte stehen in einer csv-Datei und haben einen Zeitstempel. Ich muss diese Zeitstempel später in UTC umwandeln.
    Meine Idee ist nun, eine Funktion zu erstellen, die einen String (Zeitstempel, z.b. "21.10.2021 15:00:00") entgegennimmt und zurückgibt (meineswegen bool), ob es sich um Sommerzeit oder Winterzeit handelt. Diese Funktion muss auch mit den Uhrzeiten 2A:00:00 Uhr und 2B:00:00 Uhr klarkommen.
    Ein Teilansatz wäre, wenn der Monat 11,12,1,oder 2 ist, dann ist Winterzeit; 4,5,6,7,8,9 ist Sommerzeit. Ist der Monat 3 oder 10 muss man genauer schauen, ob der Zeitpunkt vor oder nach der Zeitumstellung liegt. Ich müsste dann also nach dem letzten Sonntag im Monat abfragen und mir dann die Nachstunden um 2-3 Uhr genauer ansehen und auswerten. Alle Zeitstempel sind nach deutscher Zeit erstell worden (Sommer- oder Winterzeit).

    Es würde mich allerdings nicht wundern, wenn es schon eine fertige Funktion gibt, die ich nicht kenne (localtime -> UTC).

    Tja, ich stehe noch recht am Anfang. Hat jemand schon mit ähnlichem herumexperimentiert oder kennt jemand tutorials, die mir weiterhelfen könnten?

    Danke und Grüße

    Schnecko



  • @Schnecko sagte in Sommer- oder Winterzeit aus Zeitstempel erkennen:

    mmen.
    Ein Teilansatz wäre, wenn der Monat 11,12,1,oder 2 ist, dann ist Winterzeit; 4,5,6,7,8,9 ist Sommerzeit. Ist der Monat 3 oder 10 muss man genauer schauen, ob der Zeitpunkt vor oder nach der Zeitumstellung liegt. Ich müsste dann also nach dem letzten Sonntag im Monat abfragen und mir

    Siehe mal hier: https://howardhinnant.github.io/date/tz.html

    Ich wüsste allerdings nicht, dass dies "2A:00:00" und "2B:00:00" parsen kann. Aber du kannst ja einfach "A" und "B" im String suchen, merken, durch 0 ersetzen und dann spezialbehandeln. Zur Not einfach auf 03:00 setzen und 2 Stunden bei A und 1 bei B subtrahieren, nachdem du die 3:00 in UTC konvertiert hast. Geht vielleicht auch eleganter mit dem choose::earliest/latest.



  • Normalerweise sind Datums-Berechnungen etwas was man nicht selbst machen möchte. In diesem Fall würde ich das aber vermutlich wirklich selbst programmieren. Ist ja nicht sehr schwer. Das Fummeligste dabei ist wohl auszurechnen wann der letzte Sonntag in einem Monat war. Das lässt sich aber super unit-testen. Und zur Not kann man auch einfach eine Tabelle reinschreiben - vorausgesetzt das Programm muss nur in einem fest vorgegebenen Datumsbereich arbeiten.
    (Neue Messungen werden ja hoffentlich gleich direkt in UTC erfasst.)



  • @hustbaer sagte in Sommer- oder Winterzeit aus Zeitstempel erkennen:

    Das Fummeligste dabei ist wohl auszurechnen wann der letzte Sonntag in einem Monat war.

    Das ist aber trivial:

    #include <date.h>
    using namespace date;
    ...
    cout << year_month_day(year(2021) / 4 / sun[last]) << '\n';  // 2021-04-25
    cout << year_month_day(year(2021) / 10 / sun[last]) << '\n';  // 2021-10-31
    
    


  • Du meinst Sunday[last] (s.a. std::chrono::last_spec, std::chrono::last sowie std::chrono::weekday) (also erst seit C++20)?

    PS: Aber der Thread hier ist wohl im falschen Unterforum...



  • @wob
    Ja, mit dem von dir verlinkten date.h ist das vermutlich trivial.

    @Th69
    Ich denke er meint das Zeugs aus seinem Link: https://howardhinnant.github.io/date/tz.html



  • @Th69 sagte in Sommer- oder Winterzeit aus Zeitstempel erkennen:

    Du meinst Sunday[last]

    Ja. Wobei in dem date.h, das ich hier noch verwendet habe, sind die Monate und Wochentage als Konstanten noch die jeweiligen 3-Buchstaben-Abkürzungen. Ich sollte das die date.h hier mal updaten, ich habe offenbar eine völlig outdatete Version.

    https://github.com/HowardHinnant/date/blob/master/include/date/date.h

    Jedenfalls funktioniert das date.h auch schon mit C++11. Daraus stammen jedenfalls die std::chrono:*-Updates in den verschiedenen Standards - wenn man älteres C++ hat als C++20, dann includet man eben diese Library.



  • @hustbaer Die date.h ist echt ganz gut wenn man auf Datums-Basis arbeitet. Aber sobald man in Millisekunden oder schlimmer unterwegs ist, finde ich den Mehrwert überschaubar. daher frickel ich mir den Scheiß selber zusammen, leider.



  • Puh, da sind aber richtig gute Denkanstöße bei...

    Vorerst vielen Dank für die Antworten!

    Schnecko


Anmelden zum Antworten