Verständnisproblem bei Datumsfunktion
-
#include<iostream> #include<ctime> using namespace std; int main() { time_t rawtime; struct tm* timeinfo; time(&rawtime); timeinfo=localtime(&rawtime); cout<<"Jetziges DAtum und Uhrzeit ist "<<asctime(timeinfo)<<endl; return 0; }so ich habe den code aus einer refernz, nur ich versteh den code nicht ganz, also warum muss ich eine struct für die zeit bilden und was bedeutet das time(&rawtime), und dann wollte ich noch wissen, auf was zeigt der tm zeiger in dem moment?ich hoffe mir kann das jemand anfänger gerecht erklären...
-
Den struct stellst Du bereit damit Du für den Speicher verantwortlich bist. time() beschreibt ihn dann vermutlich mit Greenwich Time (GMT). Mit localtime() wird dann Zeitzone und Sommer/Winter Zeit eingerechnet.
timeinfo zeigt nach localtime() auf die aktuelle Zeit. Gib einfach timeinfo-> ein und schau was angeboten wird.
-
ok es zeigt auf die speicheradresse von etwas aber auf welche zeigt es? und wozu ist dann diese hilfsvariable rawtime nötig, und besonders wozu ist die refernz auf rawtime nötig
-
&rawtime ist die Adresse von rawtime.
time(&rawtime) wird nach rawtime die Zeit schreiben.timeinfo zeigt zuerst irgendwohin.
localtime(&rawtime) wandelt rawtime um fordert Speicher für das umgewandelte an und gibt die Adresse des neuen Speichers zurück. Ab dann zeigt timeinfo auf den neuen Speicher mit der lokalen Zeit.
Ich vermute Du mußt noch "delete tm;" machen um den Speicher wieder frei zugeben.
-
martin_salo schrieb:
...
Ich vermute Du mußt noch "delete tm;" machen um den Speicher wieder frei zugeben.Bloß nicht !!!
Denn einige dieser "old-school-C-Funktionen" arbeiten mit globalen Variablen, die ein "delete" gar nicht gut vertragen.
Speziell zu localtime() steht da : "...Watch out for the static return."Ist übrigens ein gutes Beispiel, warum "Pointerrückgabe" oftmals unsicher ist: Der Aufrufer weiß nicht, woher dieser Speicher kommt, wer ihn sonst noch benutzt , ob er ihn beschreiben darf oder freigeben muss/nicht darf....
Gruß,
Simon2.
-
alles klar...und noch eine frage...ist es möglich einfach mit einer schleife die nächsten 7 folgenden tage anzuzeigen, zum beispiel??
-
Du könntest es ev mit mktime probieren:
http://www.cppreference.com/stddate/mktime.html
timeinfo=localtime(&rawtime);
timeinfo->tm_mday = timeinfo->tm_mday+1; // Einen Tag drauf
time_t t = mktime(timeinfo); // Umwandeln damit man nicht auf den 32 Tag eines Monats kommt.
timeinfo=localtime(t); // Jetzt ist hoffentlich der Monat richtig gesetzt.ICh habe es nicht probiert. Eventuell mußt Du timeinfo noch zwischenkopieren...
-
also so richtig verstanden habe ich das jetzt nicht, kannst du mir das vielei an meinem code von oben erklären und ginge es auch mti einer schleife? das ich 7 tage hintereainder anzeige?=
wäre für hilfe sehr dankbarEDIT:danke habs hinbekommen