Falsche Werte bei Zeitspannenrechnung?



  • Hallo,

    ich will für mein Programm eine Funktion schreiben, in der als Wert herausgegeben wird, wieviel Zeit seit dem Programmstart vergangen ist.

    Mein Ansatz ist dieser:

    GetSystemTime(&sStartTime);
    FILETIME fStartTime;
    SYSTEMTIME sAktTime;
    
    FILETIME fAktTime;
    
    SYSTEMTIME sVergTime;
    FILETIME fVergTime;
    
    CString strZeit;
    
    SystemTimeToFileTime(&sStartTime, &fStartTime);
    
    GetSystemTime(&sAktTime);
    SystemTimeToFileTime (&sAktTime, &fAktTime);
    
    fVergTime.dwLowDateTime = fAktTime.dwLowDateTime - fStartTime.dwLowDateTime;
    fVergTime.dwHighDateTime = fAktTime.dwHighDateTime - fStartTime.dwHighDateTime;
    
    FileTimeToSystemTime(&fVergTime,&sVergTime);
    
    strZeit.Format("%02d Tage %02d:%02d:%02d",sVergTime.wDay,sVergTime.wHour,sVergTime.wMinute,sVergTime.wSecond);
    

    Das Problem hierbei ist, dass sVergTime.wDay immer 1 ist...aber es ist doch noch kein Tag vergangen.
    Der Wert müsste doch so bei ca. 1 sekunde liegen oder irre ich mich da.
    Ich bin im Debugmodus immer mal langsam durchgegangen um verschiedene Werte zu bekommen...
    Die Sekunden scheinen zu stimmen, aber es steht immer vorne 1 Tag.

    Kann mir vllt. jmd. sagen warum das so ist?

    MfG,

    Thorsten



  • Vielleicht solltest du unterscheiden zwischen "Zeitpunkt" und "Zeitspanne" - SYSTEMTIME und FILETIME speichern eigentlich Zeitpunkte (SYSTEMTIME aufgeteilt in Komponenten, FILETIME als Sekunden seit 1.1.1601) - d.h. deine Zeitdifferenz wird bei der Umwandlung zu "1. Januar 1601 - x:yy Uhr" (da hast du die 1).

    (aus dem Grund gibt es in der MFC auch CTime (Zeitpunkt) und CTimeSpan (Zeitspanne) als eigenständige Klassen)



  • Dieser Thread wurde von Moderator/in Jochen Kalmbach aus dem Forum C++/CLI mit .NET in das Forum WinAPI verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten