Uhrzeiten miteinander vergleichen



  • Ich möchte zwei Uhrzeiten als char Strings miteinander vergleichen und herausfinden, wieviele Minuten zwischen Ihnen vergangen sind. Beispiel:

    "12:59" && "13:12"

    Ergebnis: 13 Minuten unterschied.

    Wie geht das?

    difftime?

    clock()?



  • Was spricht dagegen, die Strings manuell zu parsen, die Gesamtzahl der Minuten auszurechnen und dann einfach die Differenz zwischen beiden Werten zu verwenden?



  • Das heißt 12*60+59=779 und 13*60+12=792
    792-779 = 13

    ?



  • Yep. Das wäre zumindest mein naiver Ansatz gewesen.

    Und wenn du PM als Zusatz hast, dann addierst du einfach nochmal 720 Minuten. Daten sind noch verhältnismäßig leicht zu parsen.



  • Wie viel Zeit ist denn zwischen 01:00 und 04:00 vergangen?

    a) 180 Minuten
    b) 120 Minuten
    c) 240 Minuten

    Oder ist Zeitumstellung nicht relevant?



  • Das kann die Standardbibliothek besser, bei Bedarf auch mit Sommerzeit und Zeitzone:

    int main()
    {
    	const char *a="12:59", *b="13:12";
    
    	struct tm x={.tm_mday=1,.tm_year=70,.tm_hour=atoi(a),.tm_min=atoi(a+3)},
    			  y={.tm_mday=1,.tm_year=70,.tm_hour=atoi(b),.tm_min=atoi(b+3)};
    
    	printf("%d", (int)difftime(mktime(&y),mktime(&x))/60);
    	return 0;
    }
    

    http://ideone.com/QMzBoN



  • mktime ist nicht garantiert, reentrant zu sein. Solchen Code könnte ich nicht in Servern mit mehreren Threads verwenden (wo zumindest ich oft Timestrings parsen muss) - oder in einem Signalhandler (unter Linux). Und das Erzeugen von struct tm s ist einfach sinnlos, wenn man doch eh wieder im Jahr 1970 starten muss, da benötigt man die Zeitzoneninformation (und die DST-Informationen) gar nicht.


Anmelden zum Antworten