Problem mit time.h



  • Richtig, wenn du was eigenes basteln willst, musst du auch Schaltjahre berücksichtigen. Das macht die Sache nur unnötig kompliziert, also versuch soweit es geht vorgefertigte Funktionen zu nutzen.



  • Schaltsekunden nicht vergessen, wenn man denn mit UTC arbeiten möchte. 😉



  • perfekt LordJaxom,

    also so wie Du die mktime Funktion beschreibst ist das es exakt was ich gesucht habe, leider Funktioniert sie bei mir irgendwie nicht.

    Ich bekomme wieder eine Ausgabe von 0min 64 sekunden (usw)

    times.tm_sec=times.tm_sec+2;
    
    cout << times.tm_min << ":" << times.tm_sec << endl;
    mktime(&times);
    

    oder stimmt was bei mir nicht???

    vielen dank fuer die schnellen hilfen



  • Naja, also klar sollte schon sein, dass man zuerst eine Funktion aufrufen muss, die etwas ändert, damit sich etwas geändern haben kann.

    Aber Du hast mich falsch verstanden: mktime ändert nicht die tm-Struktur, sondern berücksichtigt eventuelle Überläufe innerhalb der tm-Struktur beim time_t, welches es zurückgibt. Auf Dein Beispiel angewendet müsste das so aussehen:

    times.tm_sec = 60;
    times.tm_sec = times.tm_sec + 2;
    
    time_t stamp = mktime( &times );
    tm* newtimes = localtime( &stamp );
    
    cout << newtimes .tm_min << ":" << newtimes .tm_sec << endl;
    

    Deshalb der Rat, immer mit time_t zu rechnen, und nur bei Bedarf (zur Anzeige) in tm umzuwandeln.



  • ja alles klar...

    super habe das probiert und es funktioniert mit der time_t wirklich super!

    vielen dank an alle!



  • jetzt habe ich da doch noch ein Problem...

    wie bekomme ich die exakte sekunden zahl von einem bestimmten datum (zb 3.6.2008 23:00:00) raus?

    ich meine die berechnung ist ja wie bereits erwaehnt sehr muehsam (wegen schaltjahren). gibt es denn eine Funktion dafuer?: ich finde einfach keine.
    oder gibt es eine Funktion welche von tm nach t_time konvertiert? hatte da schon mktime getestet bekomme aber immer -1 zurueck.

    in tm vorhanden: tm_mday ; tm_mon ; tm_year ; tm_hour ; tm_min ; tm_sec
    ich will nicht wieder den wochentag berechnen.



  • Ja, genau das macht mktime. Hast Du vorher die unbenutzten Felder der tm-Struktur genullt (wday, yday und isdst)?



  • ok das hatte ich nicht. habe das jetzt probiert und bekomme aber leider immernoch -1...

    also einmal nullen mit 0 und einmal mit NULL...bringt leider beides nichts

    eine idee?



  • Sonst alle Fallen von tm beachtet? 🙂

    #include <time.h>
    #include <stdio.h>
    
    int main()
    {
        struct tm times = { 0 };
        times.tm_hour = 23;
        times.tm_mday = 3;
        times.tm_mon = 5; // monat ist 0-11!
        times.tm_year = 108; // jahr ist minus 1900!
    
        printf("%d\n", mktime(&times));
    }
    


  • ohh man...
    stimmt...

    ich hatte vergessen -1900 zu machen.

    Vielen Dank!!

    warst mir eine riesen Hilfe!


Anmelden zum Antworten