mktime liefert jedesmal -1 zurück, weiß nicht mehr weiter...



  • Hallo zusammen,

    ich bin gerade dabei eine Datumsdifferenz auszurechnen und bin dabei auf die Befehle mktime und difftime gestoßen.

    Soweit so gut, nur läuft der Algorithmus nicht, mktime liefert jedesmal -1 und nicht das was ich will...

    #include <time.h>
    
    double alter_berechnen(string stichtag, string geburtsdatum)
    {
         struct tm t1;
         struct tm t2;
    
         t1.tm_mday=31;
         t1.tm_mon=12;
         t1.tm_year=106;
    
         t2.tm_year=82;     
         t2.tm_mon=12;     
         t2.tm_mday=23;
    
         double differenz=difftime(mktime(&t1),mktime(&t2));
    
         return differenz;
    }
    

    Testweise habe ich auch das casten der Datums gelassen und die struct tm per Hand mit "ordentlichen" Werten gefüllt. Dort ist es dasselbe Problem, Differenz liefert dann logischerweise 0...

    Ich weiß einfach nicht mehr weiter. Bin ich blind? 😉

    cya chicken 😉



  • Nur eine Idee: Vielleicht solltest du mal die übrigen Member der beiden tm's initialisieren (zur Not mit Nullwerten).



  • Jo, nen memset(&t1, 0, sizeof(struct tm)); und das selbe für t2 könnte was bringen.



  • Und genau das scheints gewesen zu sein.

    Ich danke euch...

    cya



  • feigling schrieb:

    Jo, nen memset(&t1, 0, sizeof(struct tm)); und das selbe für t2 könnte was bringen.

    Warum so umständlich? Eine saubere Initialisierung per struct tm t1={0},t2={0}; reicht völlig aus.



  • Mit memset ist das ja wohl mit erheblich weniger Umstand verbunden, als jeden der neun Werte einzeln zu schreiben.



  • Wer sagt denn, daß du alle Werte schreiben mußt? WENN du eine Initialisierungsliste angibst, werden automatisch alle nicht genannten Member mit 0-Werten aufgefüllt, deshalb reicht es, ein einfaches "={0}" anzugeben. (nur wenn du den Wert nicht initialiserst, erhalten die Member willkürliche Werte)



  • @CStoll
    Das habe ich noch gar nicht gewusst !
    Also hab ich es gleich ausprobiert und kann deine Aussage bestätigen.
    Super, dann ist natürlich deine Version die bequemere !



  • Dein Code hat noch einen Fehler: Du scheinst den Monat als Zahl zwischen 1 und 12 anzugeben. Richtig wäre der Bereich 0 - 11...


Anmelden zum Antworten