Funktion zu berechnen der Zeitdifferenz
-
Hallo Leute,
ich hab mir eine Funktion geschrieben, die die Zeitdifferenz von zwei Zeiten ermittelt. Die Start- und Endzeit habe ich jeweils in folgender Form vorliegen: "30.01.2006 22:59".
Hier ist mal die Funktion die ich mir geschrieben hab:
void Ctv::CalcDuration(string *start, string *stop) { SYSTEMTIME stStart={0}, stEnd={0}, stDiff={0}; FILETIME ftStart={0}, ftEnd={0}, ftDiff={0}; ULARGE_INTEGER uliStart={0}, uliEnd={0}, uliDiff={0}; char diffTime[6]; string temp; if(*start=="N/A" || *stop=="N/A") { ProgInfo->duration="??:??"; return; } //SYSTEMTIME stStart füllen stStart.wDay=atoi(start->c_str()); temp=start->substr(3,2); stStart.wMonth=atoi(temp.c_str()); temp=start->substr(6,4); stStart.wYear=atoi(temp.c_str()); temp=start->substr(12,2); stStart.wHour=atoi(temp.c_str()); temp=start->substr(15,2); stStart.wMinute=atoi(temp.c_str()); //SYSTEMTIME stEnd füllen stEnd.wDay=atoi(stop->c_str()); temp=stop->substr(3,2); stEnd.wMonth=atoi(temp.c_str()); temp=stop->substr(6,4); stEnd.wYear=atoi(temp.c_str()); temp=stop->substr(12,2); stEnd.wHour=atoi(temp.c_str()); temp=stop->substr(15,2); stEnd.wMinute=atoi(temp.c_str()); //in FILETIME umwandeln SystemTimeToFileTime(&stStart,&ftStart); uliStart.HighPart=ftStart.dwHighDateTime; uliStart.LowPart=ftStart.dwLowDateTime; SystemTimeToFileTime(&stEnd,&ftEnd); uliEnd.HighPart=ftEnd.dwHighDateTime; uliEnd.LowPart=ftEnd.dwLowDateTime; //Zeitdifferenz ermitteln uliDiff.QuadPart=uliEnd.QuadPart-uliStart.QuadPart; ftDiff.dwHighDateTime=uliDiff.HighPart; ftDiff.dwLowDateTime=uliDiff.LowPart; FileTimeToSystemTime(&ftDiff,&stDiff); if(stDiff.wHour<10 && stDiff.wMinute<10) { sprintf(diffTime,"0%i:0%i",stDiff.wHour,stDiff.wMinute); ProgInfo->duration=diffTime; } else if(stDiff.wHour<10 && stDiff.wMinute>9) { sprintf(diffTime,"0%i:%i",stDiff.wHour,stDiff.wMinute); ProgInfo->duration=diffTime; } else if(stDiff.wHour>9 && stDiff.wMinute<10) { sprintf(diffTime,"%i:0%i",stDiff.wHour,stDiff.wMinute); ProgInfo->duration=diffTime; } else { sprintf(diffTime,"%i:%i",stDiff.wHour,stDiff.wMinute); ProgInfo->duration=diffTime; } }
Das ganze funktioniert auch.
Meine Frage ist nun, ob man diese Differenz auch einfacher bzw. besser - also ohne über den Umweg SYSTEMTIME -> FILETIME und wieder zurück - lösen kann?Schon mal Danke für eure Hilfe.
marpolin
-
Du könntest dir die Start- und Endedaten in einen "struct tm" einparsen (bin mir nicht sicher, ob es dafür eine automatisierte Lösung gibt) und dann mit man: difftime die Differenz (in Sekunden) ermitteln (und notfalls umrechnen auf Tage).