Noch vorhandene Tage bis zu einem bestimmten Datum zählen?
-
Hallo!
Versuche gerade ein kleines programm zu programmieren...
Nun hänge ich bei einem Punkt fest, da mir dafür der Code fehlt...
Ich möchte mir die noch vorhandenen Tage bis zu einem bestimmten Datum anzeigen lassen.
Wartezeit = das Datum (15.06.2009) - Today
Kann mir einer zu dieser Rechnung, die ich nicht hinbekomme, den passenden C++-Code geben?
Besten Gruß,
Dsimon24
-
Pumuckl schrieb:
Wir machen keine Hausaufgaben! Verlange keine Komplettlösungen. Hier im Forum gehts um Hilfe bei spezifischen Problemen, nicht darum, irgendjemandem die Hausaufgaben zu machen, der einfach nur zu faul ist. Wer danach sucht kann bei einem kostenpflichtigen Dienstleistungsunternehmen anfragen, nicht hier. Wenn du deine Aufgaben bearbeitest und dabei auf ein für dich unlösbares Problem stößt helfen wir natürlich gerne weiter. Sei aber nicht enttäuscht wenn du nur Hinweise bekommst, wo das Problem liegen könnte. Mit einer Komplettlösung ist weder dir noch uns geholfen - daraus lernst du nur wenig und wir müssen dir bei der nächsten Gelegenheit eine ähnliche Frage noch einmal beantworten.
Nja, es gibt einen Header namens
#include<ctime>
Damit kannst du die Zeit anzeigen lassen.
Ach ja, vielleicht ist dies ja was für dich:
http://msdn.microsoft.com/de-de/library/78zb0ese.aspx
-
Naja, die Zeit zeigt er mir schon an,
aber wie kann ich die verbleibenden tage zu einem bestimmten Datum errechnen?
Wenn ich eingib 15.06.2010 weiß der nicht´s damit anzufangen, der Computer.
-
Dsimon24 schrieb:
Wenn ich eingib 15.06.2010 weiß der nicht´s damit anzufangen, der Computer.
Meiner auch nicht,
mach dir also nichts draus. Auch Computer sind nur Menschen.
in der bereits genannten Klasse gibt es eine Struct àla
tm tmInfo;Diese kannst du fuellen mit Tag, Monat und Jahr ect.
Zur Umwandlung dann in ein time_t benoetigst du folgendes
time_t x = mktime(&tmInfo);Wenn du den timestamp des heutigen Datums und des in der zukunft liegenden hast, kannst du durch Substraktion die Zeitdifferenz ermitteln.
strftime hilft dann weiter bei der Umwandlung des timestamp in einen vernuenftigen String.
-
Dsimon24 schrieb:
Wenn ich eingib 15.06.2010 weiß der nicht´s damit anzufangen, der Computer.
Datum und Zeit kann man mit boost date_time sehr schön dem doofen Puter beibringen.
#include <iostream> #include <boost/date_time.hpp> int main(int argc, char* argv[]) { using namespace boost; using namespace boost::gregorian; days wartezeit = date(2009,6,15) - day_clock::local_day(); std::cout << wartezeit; return 0; }
-
#include <iostream> #include <ctime> using namespace std; time_t date(int year, int mon, int day) { tm t; memset(&t, 0, sizeof(tm)); t.tm_year = year - 1900; t.tm_mon = mon - 1; t.tm_mday = day; return mktime(&t); } int daydiff(time_t b, time_t a) { return difftime(a, b) / 60 / 60 / 24; } int main(void) { // Differenz vom 16.05.2010 bis zum 14.07.2010 std::cout << daydiff(date(2010, 5, 16), date(2010, 7, 14)) << " Tag(e)" << std::endl; }
-
Hab noch ein wenig korrigiert. So müsste es passen:
#include <iostream> #include <ctime> using namespace std; time_t date(size_t year, size_t mon, size_t day) { tm t; memset(&t, 0, sizeof(tm)); t.tm_year = year - 1900; t.tm_mon = mon - 1; t.tm_mday = day; return mktime(&t); } int daydiff(time_t b, time_t a) { return std::ceil(difftime(a, b) / 60 / 60 / 24); } int today() { time_t rawtime; tm *timeinfo; time (&rawtime); return mktime(localtime(&rawtime)); } int main(void) { std::cout << daydiff(today(), date(2010, 05, 19)) << " Tag(e)" << std::endl; }
Das Ergebnis sollte 3 Tage sein, logisch.
-
Die Verwendung von std::ceil ist aber süß.
-
volkard schrieb:
Die Verwendung von std::ceil ist aber süß.
Warum?
-
Mein Fehler. Ich dachte nicht, daß difftime eine Kommazahl zurückgibt.
-
Benutz einfach die funktion der time.h die dir die sekunden seid ich glaube 1.1.1900 zurückgibt. dann wandelst du das eingegebene Datum ebenfalls in Sekunden um, subtrhierst das und der rest ist die verbleibende zeit was du dann in minuten stunden tage wochen oder monate umwandeln kannst
-
c++_programmierer schrieb:
Benutz einfach die funktion der time.h die dir die sekunden seid ich glaube 1.1.1900 zurückgibt. dann wandelst du das eingegebene Datum ebenfalls in Sekunden um, subtrhierst das und der rest ist die verbleibende zeit was du dann in minuten stunden tage wochen oder monate umwandeln kannst
In C++ benutzt man keine time.h, sondern ctime. Außerdem ist diese Lösung sogesehen schon gepostet worden.