TZFILE(5)

BEZEICHNUNG
tzfile - Informationen über Zeitzonen

ÜBERSICHT
#include <tzfile.h>

BESCHREIBUNG
Wo sich die Informations-Dateien befinden, ist abhängig von der verwendeten (g)libc-Version. Libc4/5 benutzen /usr/lin/zoneinfo, doch seit libc-5.4.6 befindet es sich in /usr/share/zoneinfo.

Die Informations-Dateien über die Zeitzonen, die von tzset(3) verwendet werden, beginnen mit den magischen Zeichen "TZif", um sie als Zeitzonen-Dateien zu identifizieren. Die darauf folgenden 16 Byte sind für zukünftige Dinge reserviert. Anschließend folgen sechs 32bit-Werte (long). (Wichtig: Die Daten kommen in natürlicher Bytefolge: Highbyte zu erst). Die sechs Werte bedeuten:

tzh_ttisgmtcnt
    Anzahl der hinterlegten UTC/lokal-Indikatoren in der Datei.

tzh_ttisstdcnt
    Anzahl der standard/wall-Indikatoren in der Datei.

tzh_leapcnt
    Anzahl der Schaltsekunden, für die Daten in der Datei gespeichert sind.

tzh_timecnt
    Anzahl der übergangszeiten in der Datei.

tzh_typecnt
    Anzahl der lokalen Zeit-Typen, für die Informationen in der Datei gespeichert sind (darf nicht null sein).

tzh_charcnt
    Anzahl der Buchstaben für die Abkürzungen der Zeitzone.

Nachdem Header folgen tzh_timecnt 32bit-Werte vom Typ long in steigender Wertigkeit. Auch sie werden in natürlicher Bytefolge geschrieben. Jeder Wert ist als Epochen-Wert (Sekunden seit 01.01.1970) zu interpretieren. Zu jedem dieser Zeitpunkte gibt es einen Wechsel der Sommer- bzw. Winterzeit (der auch von time(2) zurückgegeben wird). Darauf folgen tzh_timecnt Werte vom Typ unsignedchar. Jeder dieser Werte besagt, welcher der verschiedenen lokalen Zeit-Typen, die in der Datei beschrieben werden, mit dem Zeitberechnungs-Wechsel an der gleichen Position verknüpft ist. Die Werte sind als Indizes für die nachfolgenden ttinfo-Strukturen zu verstehen, die als nächstes in der Datei stehen. Diese Strukturen sind wie folgt definiert.

struct ttinfo {
	long	tt_gmtoff;
	int	tt_isdst;
	unsigned int	tt_abbrind;
};

Jede derartige Struktur besteht aus einem 4-Byte-Wert für tt_gmtoff vom Typ long, geschrieben in natürlicher Bytefolge, gefolgt von einem 1-Byte-Wert für tt_isdst und einem 1-Byte-Wert für tt_abbrind. In jeder Struktur legt tt_gmtoff die Anzahl Sekunden fest, die zu UTC hinzugefügt werden, tt_isdst bestimmt, ob tm_isdst von localtime(3) gesetzt werden soll und tt_abbrind entspricht dem Index im Array der Abkürzungszeichen für Zeitzonen, die den ttinfo-Strukturen in der Datei folgen.

Als nächstes gibt es tzh_leapcnt Paare von 4-Byte-Werten, geschrieben in natürlicher Bytefolge. Der erste Wert jedes Paares bezeichnet die Zeit (zurückgegeben von time(2)), an dem die Schaltsekunden auftreten. Der zweite bestimmt die gesamte Anzahl der Schaltsekunden, die nach der angegebenen Zeit verwendet werden sollen. Die Wertepaare sind in aufsteigender folge nach der Zeit sortiert.

Nun folgen tzh_ttisstdcnt standard/wall-Indikatoren, jeder wird als 1-Byte-Wert gespeichert. Sie geben an, ob die Umstellungszeiten, die mit den lokalen Zeit-Typen zusammenhängen, als Standard-Zeit oder als "wall clock time" angegeben wurden. Sie werden verwendet, wenn eine Zonendatei dafür benutzt wird, POSIX-artige Umgebungsvariablen für Zeitzonen zu verarbeiten.

Schließlich gibt es tzh_ttisgmtcnt UTC/local-Indikatoren, jeder als 1-Byte-Wert gespeichert. Sie besagen, ob die Umstellungszeit, die mit den lokalen Zeit-Typen zusammenhängen, als UTC oder als lokale Zeit angegeben wurden. Sie werden verwendet, wenn eine Zonendatei dafür benutzt wird, POSIX-artige Umgebungsvariablen für Zeitzonen zu verarbeiten.

Localtime verwendet die ersten ttinfo-Eintrag für Standard-Zeit in der Datei (oder einfach den ersten wenn kein Standard-Zeit-Eintrag existiert), wenn tzh_timecnt null ist oder das Zeit-Argument kleiner ist als der erste Umstellungszeitpunkt, der in der Datei beschrieben wird.

SIEHE AUCH
newctime(3).