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