Aktuellen Timestamp erfassen
Als Beispiel eine Funktion, die die aktuelle Zeit erfaßt und über Parameter formatiert zurück gibt:
void getCurrentDateAndTime (char *currentDate, const char *formatDate, char *currentTime, const char *formatTime) { // ----- Achtung! Mehrere returns innerhalb der Funktion ------------------------------ time_t aktSekunden; struct tm *aktZeit; if (!currentDate) return; if (!formatDate) return; if (!currentTime) return; if (!formatTime) return; time(&aktSekunden); // aktuelle Zeit ermitteln aktZeit = localtime(&aktSekunden); // auf Komponenten zerlegen sprintf(currentTime, formatTime, aktZeit->tm_hour, aktZeit->tm_min, aktZeit->tm_sec); // Uhrzeit sprintf(currentDate, formatDate, aktZeit->tm_year + 1900, aktZeit->tm_mon + 1, aktZeit->tm_mday); // Datum } // getCurrentDateAndTime()
Alternativ kann die Formatierung des Strings mit Hilfe der Funktion strftime() (aus time.h) erfolgen. (Es ist wahrscheinlich sogar etwas eleganter. Das Beispiel oben dient eher dazu, den Umgang mit der Funktion time() zu erläutern.)
Hier sind weitere Infos zu den Zeit-Funktionen zu finden.
Die o.g. Funktion kann z.B. in einer Logging-Funktion genutzt werden um jede trace-Zeile mit dem Timestamp versehen:
void logIt (char *functName, char *text) { char strZeit [16]; char strDatum [16]; memset(strZeit, '\0', sizeof(strZeit)); memset(strDatum, '\0', sizeof(strDatum)); getCurrentDateAndTime(strDatum, "%04d-%02d-%02d", strZeit, "%02d:%02d:%02d"); fprintf(stdout, "%s/%s %s(): %s\n", strDatum, strZeit, functName ? functName : "NONAME(NULL-POINTER)", text ? text : "NOTEXT(NULL-POINTER)"); fflush(stdout); } // logIt()
Die Erfassung des Timestamps kann dazu verwendet werden, um die Laufzeit eines Programms oder einer Funktion zu messen. Man ruft die Funktion time() vor dem und nach dem zu messenden Abschnitt auf. Ein Beispiel dafür ist unter Zeitabstände messen zu finden.
Stand: 05.07.2016
— : Jürgen Kreick
EOF