ctime(3C) ctime(3C)
NAME
ctime, localtime, gmtime, asctime, timezone, altzone, daylight,
tzname, tzset - Datum und Zeit in Zeichenkette umwandeln
SYNTAX
#include <time.h>
char *ctime(const timet *clock);
struct tm *localtime(const timet *clock);
struct tm *gmtime(const timet *clock);
char *asctime(const struct tm *timeptr);
extern long int timezone, altzone;
extern int daylight;
extern char *tzname[2];
void tzset(void);
BESCHREIBUNG
ctime(), localtime() und gmtime() akzeptieren Argumente vom Typ
timet, auf die clock zeigt, und die die Zeit seit 00:00:00 UTC (Coor-
dinated Universal Time), 1. Januar 1970 (in Sekunden) liefern. ctime()
liefert einen Zeiger auf eine 26 Zeichen lange Zeichenkette in folgen-
der Form: Zeitzonen- und Sommerzeitkorrekturen werden durchgeführt,
bevor die Zeichenkette generiert wird. Alle Felder haben eine kon-
stante Länge:
Fri Sep 13 00:00:00 1986\n\0
ctime() entspricht:
asctime(localtime(clock))
localtime() (Ortszeit) und gmtime() geben Zeiger auf tm-Strukturen
zurück, die nachstehend erläutert werden. localtime() berücksichtigt
Zeitzonen und eventuelle Sommerzeitkorrekturen; gmtime() wandelt
direkt in die UTC um, d. h. die vom UNIX System benutzte Zeit.
asctime() wandelt eine tm-Struktur in eine Zeichenkette aus 26 Zeichen
um, wie in obigem Beispiel gezeigt, und gibt einen Zeiger auf die Zei-
chenkette zurück, wobei die Entsprechung des folgenden Algorithmus
verwendet wird:
Seite 1 Reliant UNIX 5.44 Gedruckt 11/98
ctime(3C) ctime(3C)
char *asctime(const struct tm *timeptr)
{
static char wdayname[7][3] = {
"Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat"
};
static char monname[12][3] = {
"Jan", "Feb", "Mar", "Apr", "May", "Jun",
"Jul", "Aug", "Sep", "Oct", "Nov", "Dec"
};
static char result[26];
sprintf(result, "%.3s %.3s%3d %.2d:%.2d:%.2d %d\n",
wdayname[timeptr->tmwday],
monname[timeptr->tmmon],
timeptr->tmmday, timeptr->tmhour,
timeptr->tmmin, timeptr->tmsec,
1900 + timeptr->tmyear);
return result;
}
In der Include-Datei time.h sind die Vereinbarungen aller Funktionen
und externer Werte sowie der tm-Struktur enthalten. Die Strukturver-
einbarung ist wie folgt:
struct tm {
int tmsec; /* Sekunden - [0, 61] für übersprungene
Sekunden */
int tmmin; /* Minuten - [0, 59] */
int tmhour; /* Stunden - [0, 23] */
int tmmday; /* Tag des Monats - [1, 31] */
int tmmon; /* Monate - [0, 11] */
int tmyear; /* Jahre seit 1900 */
int tmwday; /* Tage seit Sonntag - [0, 6] */
int tmyday; /* Tage seit dem 1. Januar - [0, 365] */
int tmisdst; /* Option für Sommerzeit */
};
tmisdst ist positiv, wenn Sommerzeit eingestellt ist, null, wenn Som-
merzeit nicht eingestellt ist, und negativ, wenn die Information nicht
verfügbar ist.
Die externe Variable altzone beinhaltet den Unterschied in Sekunden
zwischen UTC und der alternativen Zeitzone. Die externe Variable
timezone enthält den Unterschied in Sekunden zwischen UTC und der ört-
lichen Zeit. Die externe Variable daylight zeigt an, ob die Sommerzeit
angezeigt werden soll. timezone und altzone sind standardmäßig 0
(UTC). Die externe Variable daylight ist ungleich null, wenn eine
alternative Zeitzone existiert. Die Zeitzonennamen sind in der exter-
nen Variable tzname, enthalten, die standardmäßig auf
char *tzname[2] = { "GMT", " " };
Seite 2 Reliant UNIX 5.44 Gedruckt 11/98
ctime(3C) ctime(3C)
gesetzt wird. Diese Funktionen wissen über die Eigenarten dieser Kon-
vertierungen für verschiedene Zeitperioden in den Vereinigten Staaten
(insbesondere in den Jahren 1974, 1975, und 1987) Bescheid. Sie behan-
deln die neue Sommerzeit, beginnend mit dem ersten Sonntag im April
1987.
tzset() benutzt den Inhalt der Umgebungsvariablen TZ, um die Werte
unterschiedlicher externer Variablen zu überschreiben. Die Funktion
tzset() wird von asctime() oder aber auch vom Benutzer aufgerufen. In
der Beschreibung von environ(5) finden Sie nähere Angaben zu der Umge-
bungsvariablen TZ.
tzset() überprüft den Inhalt der Umgebungsvariablen und weist die ver-
schiedenen Felder den entsprechenden Variablen zu. Zum Beispiel lautet
der vollständigste Eintrag für New Jersey 1986:
EST5EDT4,116/2:00:00,298/2:00:00
oder einfach nur
EST5EDT
Ein Beispiel für die Südhalbkugel, zum Beispiel Cook Islands, könnte
sein:
KDT9:30KST10:00,63/5:00,302/20:00
In der langen Version des New Jersey-Beispiels von TZ ist tzname[0]
EST, timezone wird auf 5*60*60 gesetzt, tzname[1] ist EDT, altzone
wird auf 4*60*60 gesetzt, die Sommerzeit beginnt am 117. Tag um 2 Uhr
nachts und endet am 299. Tag um 2 Uhr nachts (es wird der Julianische
Kalender benutzt). daylight wird auf einen positiven Wert gesetzt.
Start- und Endzeit sind relativ zur Sommerzeit. Wenn Start- und Endda-
tum der Sommerzeit nicht geliefert werden, werden die für die Verei-
nigten Staaten in diesem Jahr gültigen Tage benutzt, und die Zeit wird
2 Uhr nachts sein. Wenn nur die Zeit nicht verfügbar ist, wird diese
auf 2 Uhr nachts gesetzt.
Die Auswirkungen von tzset() sind so, daß die Werte der externen
Variablen timezone, altzone, daylight, und tzname geändert werden.
ctime(), localtime(), mktime(), und strftime() werden ebenso diese
externen Variablen aktualisieren, als hätten sie tzset() zu der Zeit
aufgerufen, die vom timet- oder dem von ihnen konvertierten struct
tm-Wert spezifiziert wird.
Beachten Sie, daß in den meisten Installationen TZ standardmäßig durch
die /etc/profile-Datei auf den korrekten Wert gesetzt wird, wenn der
Benutzer sich einloggt [siehe profile(3C) und timezone(4)].
Seite 3 Reliant UNIX 5.44 Gedruckt 11/98
ctime(3C) ctime(3C)
RÜCKGABEWERT
Die Funktionen asctime(), ctime(), gmtime() und localtime() geben
Werte in einem von zwei statischen Objekten zurück: einer unterteilten
Zeitstruktur und einem char-Array. Die Ausführung einer dieser Funk-
tionen kann die Informationen überschreiben, die in einem der Objekte
durch eine andere Funktion zurückgegeben wurde.
Bei erfolgreicher Ausführung gibt die Funktion asctime() einen Zeiger
auf die Zeichenkette zurück.
Die Funktion gmtime() gibt einen Zeiger auf eine tm-Struktur zurück.
HINWEISE
Die Ergebniswerte für ctime(), localtime() und gmtime() zeigen auf
statische Daten, die bei jedem Aufruf überschrieben werden.
Das Ändern der Zeit während des Zeitraums der Änderung von timezone
nach altzone oder umgekehrt kann unvorhersehbare Ergebnisse hervorru-
fen. Der Systemverwalter muß das Start- und Enddatum der Sommerzeit
jährlich ändern, wenn das Format des Julianischen Kalenders verwendet
wird. gmtime() und localtime() unterstützen nicht die lokalen Datums-
und Zeitformate. Um maximale Portabilität zu erreichen, sollten Sie
strftime(3C) verwenden.
DATEIEN
/usr/lib/locale/locale/LCTIME
enthält umgebungsspezifische Datums- und Zeitinformationen
SIEHE AUCH
time(2), cftime(3C), clock(3C), getenv(3C), mktime(3C), putenv(3C),
setlocale(3C), strftime(3C), printf(3S), profile(4), timezone(4),
environ(5).
Seite 4 Reliant UNIX 5.44 Gedruckt 11/98