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 MinutenOder 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; }
-
mktimeist 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 vonstruct tms 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.