![]() |
|
|
C bietet Ihnen eine umfassende Unterstützung für alle Fragen, die mit Datum und / oder Uhrzeit zu tun haben: die Funktionen aus <time.h>.
Ab heute nicht mehr. Schauen Sie sich das folgende Beispiel an.
/*
* File USE_TIME.C: mktime & strftime benutzen
*
*/
#include <stdio.h>
#include <time.h>
char *dayName[] = { "Sonntag", "Montag", "Dienstag", "Mittwoch",
"Donnerstag", "Freitag", "Samstag" };
int main(void)
{
struct tm tm;
char dateBuff[30];
/* 'struct tm' initialisieren: 1.1.2000, 12:00:00 */
tm.tm_year = 100; /* Jahr - 1900 */
tm.tm_mon = 0; /* Monat - 1 */
tm.tm_mday = 1; /* Tag */
tm.tm_hour = 12;
tm.tm_min = 0;
tm.tm_sec = 0;
tm.tm_isdst = -1;
/* Wochentag bestimmen lassen */
mktime( &tm);
/* alle Tage von Januar und Februar */
while ( tm.tm_mon < 2 ) {
/* Datum ausgeben */
strftime( dateBuff, sizeof( dateBuff), "Der %d.%m.%Y ist ein ",
&tm);
printf( "%s%s", dateBuff, dayName[tm.tm_wday]);
/* Schaltjahr ? */
if ( (tm.tm_mon == 1) && (tm.tm_mday == 29) )
printf( " (huch, ein Schaltjahr)");
printf( ".\n");
/* nächsten Tag erzeugen: 'mktime' erledigt alles */
tm.tm_hour = 36;
mktime( &tm);
}
return 0;
}
Sieben Zeilen Code werden gebraucht, um die Datenstruktur tm mit Datum und Uhrzeit zu initialisieren. In weiteren sieben Zeilen
Der Trick, der das ermöglicht, ist eine wenig bekannte Eigenschaft von mktime: Bei der Angabe der Uhrzeit sind Sie nicht an den Bereich 0 - 23 gebunden. Wenn Sie für einen beliebigen Tag z.B. eine Uhrzeit von 36:00:00 angeben, dann ist - in der hier benutzten Logik - 12:00:00 des folgenden Tages gemeint, und mktime rechnet das Datum entsprechend um. So kommen Sie ohne nennenswerten Aufwand von einem Tag zum nächsten, ohne sich um lästige Details wie Monats- oder Jahreswechsel Gedanken machen zu müssen.
Diese extrem nützliche Eigenschaft verbirgt sich hinter dem Satz:
The original values of the fields tm_sec, tm_min, tm_hour, tm_mday, and tm_mon are not restricted to the ranges described in the tm structure. If the fields are not in their proper ranges, they are adjusted.
(Auszug aus der Online-Hilfe meines Compilers)
Wie kommt man von diesem trockenen Satz auf die Idee, mktime in dieser Art
einzusetzen? Keine Ahnung, ich bin nicht selbst darauf gekommen. Ich habe es aus Plaugers The Standard C Library. In der Erläuterung
zu mktime geht er hierauf ein. Aber es ist eine pfiffige Geschichte, oder?
Die folgenden Themen können für Sie in diesem Zusammenhang ebenfalls von Interesse sein:
Falls Sie Software für Embedded Systems entwickeln: Time & Date in Embedded Systems.
Sie können das Beispiel herunterladen, aber
beachten Sie bitte auch die Nutzungsbedingungen.
Hat dieser Beitrag Ihnen gefallen? Nutzt Ihnen der Tip? Dann bitte ich Sie um einen kurzen Kommentar. Wenn Sie hier klicken, brauchen Sie nur noch Ihre Meinung einzutragen.
Sie können sich auch benachrichtigen lassen, wenn es hier etwas Neues gibt: Wählen Sie die Themen aus, die Sie interessieren und geben Sie an, wie oft - oder wie selten - Sie informiert werden wollen.
Copyright © Helmut Giese, email: hgiese@ratiosoft.com
Parkstr. 41, 34119 Kassel, Tel.: 0561 - 766 59 50, Fax: 0561 - 766 59 51
Königstor 59, 34119 Kassel, Tel.: 0561 - 739 35 30, Fax: 0561 - 739 35 31
Web Design von Bianca Engler: email
internet