Datumberechnung: Jeder Montag von dieser Woche an



  • Hallole.
    Ich stoße nun auf ein mir bisher unbekannter Thema:
    Datumsberechnung.

    Und zwar folgendes:
    Ich bekomme von einer Software das Datum für den Montag der aktuellen Woche.

    Ich sollte nun von diesem Datum an für 10 Folgewochen den Montag + die restlichen Wochentage berechnen.
    Das soll einer Übersicht dienen die eben mit dem Montag anfängt.
    Ich bekomme also zb für diese Woche den 9.04.2007 geliefert und muss aus Basis von diesem die nächsten 10 Montage ausrechnen.
    Schau ich in den Kalender, so wäre das der 16.4 ,23.4,30.4, usw.
    Doch wie berechne ich dieses Datum auch dann Monats und Jahresübergreifend?
    Ich sollte ja dann auch ausgehend von jedem Montag die restlichen Tage der Woche berechnen.
    Doch was wenn mitten in der Woche ein neuer MOnat oder ein neues Jahr anfängt(Soll ja vorkommen 😃 )

    ICh habe nun gedacht, daß ich mit mktime und srftime arbeite.
    Also daß ich der aktuelle MOntag auf die Tage des Jahres runterrechne und anhand von dem dann addiere.

    Also der 9.4.2007 ist der 99 tag des Jahres +7(also nächstes MOntag) wäre dann der 106 tag.
    Nur wie kann ich das zurückrechnen?
    Ich kann doch nicht für jeden TAg das neu ausrechnen?
    Gibts da Funktionen dafür?

    Hier mal ein Ansath bei dem ich nicht weiterkomme:

    akt_tag=boost::lexical_cast<unsigned int>(str_akt_tag);
    akt_mon=boost::lexical_cast<unsigned int>(str_akt_mon);
    akt_jahr=boost::lexical_cast<unsigned int>(str_akt_jahr);
    
    /* Initialisiere struct tm mit dem 9.4.2007 */
    memset( &mydate, 0, sizeof(mydate));
    mydate.tm_mday = akt_tag;
    mydate.tm_mon = akt_mon - 1; 
    ydate.tm_year = akt_jahr - 1900;
    
    mktime( &mydate);    
    
    strftime( msg, sizeof(msg), "Der %j. Tag des Jahres.\n", &mydate);
    

    Also in dem %j steht der 099 tag des Jahres.
    wie komme ich hier nun weiter?
    Schätze mal dsa Ansatz ist etwas umständlich, vielleicht hat einer von Euch eine Idee?
    Gibts was boost-mäßiges?

    Danke mal Mondmann



  • Der Ansatz sieht schonmal gar nicht so schlecht aus. Der nächste Montag ist von hier aus genau 7 Tage = 604800 Sekunden weiter, also kannst du dir den Rückgabewert von mktime() nehmen, dort n*604800 draufaddieren und das Ergebnis mit gmtime() wieder in ein lesbares Format aufdröseln.



  • Coole sache, vielen Dank.
    Mondmann



  • CStoll schrieb:

    Der Ansatz sieht schonmal gar nicht so schlecht aus. Der nächste Montag ist von hier aus genau 7 Tage = 604800 Sekunden weiter, also kannst du dir den Rückgabewert von mktime() nehmen, dort n*604800 draufaddieren und das Ergebnis mit gmtime() wieder in ein lesbares Format aufdröseln.

    achtung: du darfst hier die sommerzeit/winterzeit umstellung nicht vergessen...



  • Jo ich habs nun mit localtime gemacht, da wird Sommer/Winterzeit gleich mitberechnet, wenn ich die Doku richtig gelesen habe.

    Grüße Mondmann


Log in to reply