Sie müssen berücksichtigen, was Sie mit "Zeit" meinen. Es gibt zwei Konzepte, Zeitpunkte und Dauer. Es macht keinen Sinn, Zeitpunkte voneinander zu addieren oder zu subtrahieren. Es macht Sinn, Dauern zu addieren und subtrahieren (was zu einer Dauer führt), und es ist sinnvoll, eine Dauer mit einem Zeitpunkt zu addieren und zu subtrahieren (was zu einem Zeitpunkt führt.
) Viele Zeit-APIs sind nicht gut Aufgabe der Unterscheidung zwischen den beiden Begriffen, aber die Standard-C++ <chrono>
Bibliothek funktioniert ziemlich gut.
Hier einige Code, der Mißbräuche der C tm
Typ, um ein paar Dauern von dem Benutzer zu erhalten, so dass sie zusammen addiert, und dann wieder Mißbräuche tm
um das Ergebnis auszugeben
#include <iostream> // cout, cin
#include <iomanip> // get_time, put_time
#include <chrono> // hours, minutes, duration_cast
int main() {
// input, get a couple durations to do arithmetic on
// technically std::tm represents a time point and get_time is supposed to
// parse a time point, but we treat the results as a duration
std::tm t;
std::cin >> std::get_time(&t, "%H:%M");
auto duration1 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min);
std::cin >> std::get_time(&t, "%H:%M");
auto duration2 = std::chrono::hours(t.tm_hour) + std::chrono::minutes(t.tm_min);
// do the arithmetic
auto sum = duration1 + duration2;
// output
auto hours = std::chrono::duration_cast<std::chrono::hours>(sum);
auto minutes = std::chrono::duration_cast<std::chrono::minutes>(sum - hours);
t.tm_hour = hours.count();
t.tm_min = minutes.count();
std::cout << std::put_time(&t, "%H:%M") << '\n';
}
Scheint, wie Sie es haben. Viel Glück!. – littleadv
Das einzige Problem ist, dass ich die folgende Header-Datei und Zeitklasse verwenden muss – Emptypeace
Sie brauchen nicht die Zeitklasse für das .. das wäre eine Verschwendung von Zeit .. (kein Wortspiel beabsichtigt) .. was Sie require ist ziemlich einfach und kann leicht mit normalen arithmetischen Operationen erreicht werden. – iKlsR