mktime() bzw difftime() geht nicht



  • Hallo Zusammen,
    ich programmiere gerade an einem Programm, indem ich ein Datum einlese und von diesem Datum aus die Anzahl der Tage bis heute berechnen moechte. Mein Gedanke war es dieses Problem mit mktime() und difftime zu loesen. Leider zeigt mir die variable t immer 0 an. Kann mir bitte jemand weiterhelfen? Ich bin auch offen fuer eine bessere Loesung. Danke

    struct tm *timeinfo;
    	struct tm *timeinfo2;
    	time_t rawtime;
    
    	time(&rawtime);
    	timeinfo = localtime(&rawtime);
    	timeinfo2 = localtime(&rawtime);
    
    	timeinfo->tm_year =2014-1900;
    	timeinfo->tm_mon =11;
    	timeinfo->tm_mday =21;
    
    	timeinfo2->tm_year =2013-1900;
    	timeinfo2->tm_mon =11;
    	timeinfo2->tm_mday =25;
    	timeinfo2->tm_min=1;
    
    	double t=difftime(mktime(timeinfo2),mktime(timeinfo));[code]
    

    [/code]



  • Warum benutzt du hier localtime?

    localtime schrieb:

    Return Value
    A pointer to a tm structure with its members filled with the values that correspond to the local time representation of timer.

    The returned value points to an internal object whose validity or value may be altered by any subsequent call to gmtime or localtime.

    http://www.cplusplus.com/reference/ctime/localtime/

    Du kannst ja mal in Zeile 8 ein

    printf("%p %p %i\n", timeinfo, timeinfo2, timeinfo-timeinfo2);
    

    einfügen.
    Dann siehst du, das die structs die selbe Adresse haben.

    Also nimm richtige struct tm und nicht nur Pointer.
    Und localtime_s , wenn es das auf deinem System gibt.



  • Es funktioniert immer noch nicht. Ich sitze immer noch auf dem Schlauch. ich habe den Code wie folgt veraendert, jedoch hat sich nichts geandert. kann jemand bitte meinen Code anpassen bzw. mir sagen was ich aendern soll. Vielen Dank

    struct tm timeinfo,timeinfo2;
    	time_t rawtime;
    
    	time(&rawtime);
    	localtime_s(&timeinfo,&rawtime);
    	localtime_s(&timeinfo,&rawtime);
    
    	timeinfo.tm_year =2014-1900;
    	timeinfo.tm_mon =11;
    	timeinfo.tm_mday =21;
    
    	timeinfo2.tm_year =2013-1900;
    	timeinfo2.tm_mon =11;
    	timeinfo2.tm_mday =25;
    	timeinfo2.tm_min=1;
    
    	double t=difftime(mktime(&timeinfo2),mktime(&timeinfo));
    


  • Jetzt funktioniert es. Es war noch einer Fehler enthalten. Rueckgabe ist die Differenz in Sekunden.

    struct tm timeinfo,timeinfo2;
    	time_t rawtime;
    
    	//time(&rawtime);
    	localtime_s(&timeinfo,&rawtime);
    	localtime_s(&timeinfo2,&rawtime);
    
    	timeinfo.tm_year =2013-1900;
    	timeinfo.tm_mon =11;
    	timeinfo.tm_mday =21;
    
    	timeinfo2.tm_year =2013-1900;
    	timeinfo2.tm_mon =11;
    	timeinfo2.tm_mday =25;
    
    	double t=difftime(mktime(&timeinfo2),mktime(&timeinfo));
    

Anmelden zum Antworten