time - Verständnisproblem
-
Ich möchte das aktuelle Datum und die Uhrzeit ausgeben lassen. Dazu habe ich folgendes gefunden:
time_t rawtime; struct tm* timeinfo; time(&rawtime); timeinfo = localtime(&rawtime); printf("Current local time and date: %s", asctime(timeinfo));Es funktioniert wunderbar, aber ich verstehe nicht genau, was da in welchem Schritt geschieht. Vor allem die zweite Zeile ist unklar. Könnte mir das vielleicht jemand erklären?
Ich habe dann noch folgendes gefunden, was genau den gleichen Output erzeugt, aber viel einfacher aussieht:
time_t rawtime; time (&rawtime ); printf ("Current local time and date: %s", ctime (&rawtime));Macht der erste Code was anderes als der zweite?
-
C hat zwei Möglichkeiten, einen Datum/Zeit-Wert zu speichern - entweder als time_t (ein Ganzzahlwert mit den Sekunden seit afair 1970) und struct tm (eine Struktur, die den Wert in Tag/Monat/Jahr (und einige weitere Angaben) unterteilt.
time() liefert dir die aktuelle Systemzeit als time_t, localtime() und gmtime() wandeln diesen um in ein struct tm und ctime() bzw. acstime() verarbeiten die beiden Formate in ein lesbares Format um.
-> Also: Ja, beide Varianten machen das selbe, nur daß du im oberen Code noch einen Zwischenschritt dazwischengeschaltet.Vor allem die zweite Zeile ist unklar. Könnte mir das vielleicht jemand erklären?
Die Funktion localtime() liefert einen Zeiger auf das struct mit dem Endergebnis, also benötigst du auch einen Zeiger, um in Zeile 4 diesen Wert entgegenzunehmen.
-
also:
struct tm * timeinfo;dort wird ein zeiger auf die struktur tm erzeugt.
in C musste man, wenn man ein struct hat und ein objekt davone rstellen will, noch "struct StrukturName variablenName;" schreiben
du hast also einen zeiger auf eine struktur, die informationen wie uhrzeit, datum und wochentag usw. aufnimmttime_t ist ein datentyp, der eine ganzahl beeinhaltet, welche die sekunden (oder millisekunden) seit dem 1.1.1970 angibt.
mit time(&rawtime); füllst du diese variable mit der aktuellen zeitund localtime macht aus diesen sekunden deine tm stuktur und füllt diese
asctime macht eifnach einen string aus der tm strukturdie zweite möglichkeit überspringt den weg über die tm struktur und nutzt stattdessen eine andere funktion (die intern vllt dasselbe macht?!?)
-
Danke für die schnelle Antwort. Jetzt kann ich es ruhigen Gewissens verwenden
