TZSET(3)

BEZEICHNUNG
tzset, tzname, timezone, daylight - initialisiere Zeitzonen-Daten

ÜBERSICHT
#include <time.h>

void tzset (void);

extern char *tzname[2]; /* Zeitzonenname */
extern long timezone; /* Sommerzeit-Indikator */
extern int daylight; /* Abstand zu UTC */

BESCHREIBUNG
Die Funktion tzset initialisiert tzname[], daylight und timezone abhängig von der Umgebungsvariable TZ. Diese Funktion wird automatisch von anderen Funktionen verwendet, die Zeiten umrechnen und dazu Informationen zur Zeitzone benötigen. In einer SysV-artigen Umgebung wird sie auch die Variablen timezone (Sekunden westlich von GMT) sowie daylight (0, falls diese Zeitzone keine Sommer-/Winterzeit-Regeln beinhaltet und ungleich 0, falls es eine Zeit des Jahres gibt, in der Sommer-/Winterzeit-Regeln greifen) setzen. Sollte die TZ-Variable nicht gesetzt sein, wird tzname mit bestmöglicher Näherung aus der lokalen "Wall Clock"-Zeit gesetzt. Dabei wird auf die Datei localtime im systemweiten Zeitzonen-Verzeichnis (siehe unten) zurückgegriffen, dessen Format in tzfile(5) beschrieben wird. (Man sieht häufig auch /etc/localtime an dieser Stelle, ein Symlink zur richtigen Datei im Zeitzonen-Verzeichnis.) Wenn die TZ-Variable gesetzt ist, jedoch ihr Wert NULL ist oder der Wert ein Format (siehe unten) hat, welches nicht interpretiert werden kann, so wird "Coordinated Universal Time" (UTC) benutzt. Das Programm kennt drei verschiede Formate für TZ. Das erste Format wird benutzt wenn in der Zeitzone keine Sommerzeit vorgesehen ist.

    std offset

Die Zeichenkette std definiert den Namen der Zeitzone. Er besteht aus wenigstens drei Buchstaben. Die Zeichenkette offset folgt unmittelbar und beschreibt den Wert, der hinzuaddiert werden muss, um Coordinated Universal Time (UTC) zu erhalten. Der offset ist positiv für Zeitzonen westlich vom Null-Meridian (Greenwich) und negativ für Zeitzonen östlich davon. Die Stunde muss zwischen 0 und 24 liegen, die Minuten zwischen 0 und 59, die Sekunden ebenfalls. (Nicht alle Systeme machen das so: AIX kennt auch HH >> 24 ) Das zweite Format ermöglicht es die Sommerzeit mit zu definieren.

    std offset dst [offset],start[/time],end[/time]

Es sind keine Leerzeichen zwischen den Elementen vorgesehen. Die ursprünglichen Werte für std und offset spezifizieren die Zeitzone wie oben beschrieben. Die Zeichenketten dst und offset bezeichnen den Namen und Offset der Sommerzeit. Ist der Offset weggelassen wird angenommen, dass die Sommerzeit eine Stunde in der Zukunft liegt. Das Feld start definiert den Beginn der Sommerzeit und end bezeichnet das Zurückschalten zur Normalzeit. Die Felder können das folgende Format haben:

Jn  Dies definiert einen Julianischen Tag, wobei n zwischen 1 und 365 liegt. Der 29. Februar wird niemals gezählt, auch nicht in Schaltjahren.

n   Dies definiert einen Julianischen Tag, wobei n zwischen 1 und 365 liegt. Der 29. Februar wird niemals gezählt, auch nicht in Schaltjahren.

Mm.w.d
    Das definiert
       - den Tag d (0 <= d <= 6)
       - der Woche w (1 <= w <= 5), in welcher der Tag d liegt,
       - des Monats m (1 <= m <= 12). Woche 1 ist die erste Woche, in der der Tag d vorkommt und Woche 5 ist die letzte Woche, in der der Tag d vorkommt. Tag 0 bezeichnet den Sonntag.

Die time-FelderbeschreibendenZeitpunktderjeweilslokalenZeit, an dem umgeschaltet wird. Wenn hier nicht anders definiert gilt die Voreinstellung 02:00:00.

Das dritte Format besagt, dass die Zeitzonen-Information aus einer Datei gelesen werden soll.

    :[filespec]

Wird hier keine Datei angegeben, so wird die Datei localtime im Verzeichnis für die Zeitzonendateien gelesen. Die Zeitzonendateien finden sich im Verzeichnis /usr/share/zoneinfo. Das Dateiformat ist in tzfile(5) dokumentiert. Sollte filespec nicht mit einem `/' beginnen, so wird der Pfad relativ zum Verzeichnis für Zeitzonendateien angenommen.

DATEIEN
Wo die Daten für die Zeitzonen gesucht werden, ist von der (g)libc Version abhängig. Libc4 und libc5 verwenden /usr/lib/zoneinfo und wird seit libc-5.4.6 /usr/share/zoneinfo probieren, wenn das fehlschlägt. Seit Glibc2 gilt: wenn die Variable TZDIR existiert, wird sie als Basisverzeichnis benutzt. Die Voreinstellung hängt von der Installation ab, bedeutet jedoch meistens /usr/share/zoneinfo. Dieses Verzeichnis beinhaltet normalerweise folgende Dateien:

localtime
     - lokale Zeitzonendaten

posixrules
     - Regeln für TZ nach POSIX

Häufig ist /etc/localtime ein Link auf die Datei localtime oder auf die korrekte Zonendatei.

KONFORM ZU
SVID 3, POSIX, BSD 4.3

ANMERKUNGEN
Beachten Sie bitte, dass die Variable daylight nicht bedeutet, dass im Moment Sommerzeit herrscht. Sie beschrieb früher die Nummer eines Algorithmus (siehe Variable in gettimeofday(2)). Sie ist seit mehreren Jahren obsolete, wird jedoch von SUSv2 vorausgesetzt. BSD4.3 beinhaltete eine Routine char *timezone(zone,dst), die den Namen der Zeitzone zurückgab, der dem ersten Argument (Minuten westlich von GMT) entsprach. Wenn das zweite Argument 0 war, wurde der Standard-Name verwendet, andererseits die Sommerzeit-Version.

SIEHE AUCH
date(1), gettimeofday(2), time(2), ctime(3), getenv(3), tzfile(5).