Scroll to navigation

TZFILE(5) Linux-Programmierhandbuch TZFILE(5)

BEZEICHNUNG

tzfile - Zeitzonen-Informationen

BESCHREIBUNG

Diese Seite beschreibt die Struktur der Zeitzonen-Dateien, die von tzset(3) verwandt werden. Diese Dateien können typischerweise in /usr/lib/zoneinfo oder /usr/share/zoneinfo gefunden werden.

Zeitzoneninformationsdateien beginnen mit einem 44-Byte-Kopf, der wie folgt strukturiert ist:

  • Die magische Vier-Byte-Sequenz »TZif« identifiziert dies als Zeitzoneninformationsdatei.
  • Ein einzelnes Zeichen identifiziert die Version des Dateiformats: entweder ein ASCII NUL ('\0') oder ein '2' (0x32).
  • Fünfzehn Bytes, die Nullen enthalten, sind für zukünftige Nutzung reserviert.
  • Sechs Vierbytewerte des Typs long, geschrieben in einer »standard«-Byte-Reihenfolge (das »high-order«-Byte des Wertes ist zuerst geschrieben). Diese Werte sind, in Reihenfolge:
tzh_ttisgmtcnt
Anzahl der in der Datei hinterlegten UTC-/Lokal-Kennziffern
tzh_ttisstdcnt
Anzahl der in der Datei gespeicherten Standard-/Wall-Kennziffern
tzh_leapcnt
Anzahl der Schaltsekunden, für die Angaben in der Datei gespeichert sind
tzh_timecnt
Anzahl der »Übergangszeiten« (transition times), für die Angaben in der Datei gespeichert sind
tzh_typecnt
Anzahl der »lokalen Zeit-Typen«, für die Informationen in der Datei gespeichert sind (darf nicht Null sein)
tzh_charcnt
Anzahl der Zeichen für in der Datei gespeicherte Zeitzonen-Abkürzungen (timezone abbreviation strings)

Nach diesem Header folgen tzh_timecnt 4-Byte-Werte vom Typ long, nach steigender Wertigkeit sortiert. Auch sie werden in der Standard-Byteordnung geschrieben. Jeder Wert wird als Zeitpunkt (wie er von time(2) zurückgegeben wird) verwendet, zu dem sich die Regeln für die Berechnung der lokalen Zeit ändern. Darauf folgen tzh_timecnt Werte vom Typ unsigned char. Jeder dieser Werte besagt, welcher der verschiedenen, in der Datei beschriebenen lokalen Zeit-Typen, mit dem Wechsel der Zeitberechnung mit dem gleichen Index verknüpft ist. Die Werte dienen als Indizes für ein Feld von ttinfo-Strukturen (mit tzh_typecnt Einträgen). Diese Strukturen sind wie folgt definiert:

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

Jede Struktur besteht aus einem 4-Byte-Wert für tt_gmtoff vom Typ long, geschrieben in einer Standard-Bytefolge, gefolgt von den 1-Byte-Werten für tt_isdst und für tt_abbrind. In jeder Struktur legt tt_gmtoff die Anzahl Sekunden fest, die zu UTC addiert werden, tt_isdst bestimmt, ob tm_isdst von localtime(3) gesetzt werden soll und tt_abbrind entspricht dem Index im Feld 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 Standard-Bytefolge. Der erste Wert jedes Paares bezeichnet den Zeitpunkt (Rückgabewert von time(2)), zu dem die Schaltsekunden auftreten. Der zweite bestimmt die gesamte Anzahl der Schaltsekunden, die nach der angegebenen Zeit eingelegt werden sollen. Die Wertepaare sind in aufsteigender Folge nach der Zeit sortiert.

Nun folgen tzh_ttisstdcnt Standard-/Wall-Kennziffern, jede wird als 1-Byte-Wert gespeichert. Sie geben an, ob die Übergangszeiten, die den lokalen Zeit-Typen zugeordnet sind, als Standard-Zeit oder als »wall clock time« angegeben wurden. Sie werden verwendet, wenn eine Zonendatei für die Verarbeitung POSIX-artiger Zeitzonen-Umgebungsvariablen eingesetzt wird.

Schließlich gibt es tzh_ttisgmtcnt UTC-/Lokal-Kennziffern, jede als 1-Byte-Wert gespeichert. Sie besagen, ob die den lokalen Zeit-Typen zugeordneten Übergangszeiten als UTC oder als lokale Zeit angegeben wurden. Sie werden verwendet, wenn eine Zonendatei für die Verarbeitung POSIX-artiger Zeitzonen-Umgebungsvariablen eingesetzt wird.

localtime(3) verwendet den ersten ttinfo-Eintrag für Standardzeit in der Datei (oder einfach den ersten ttinfo-Eintrag, wenn kein Standardzeit-Eintrag existiert), wenn entweder tzh_timecnt Null ist oder das Zeit-Argument kleiner ist als der erste in der Datei abgelegte Übergangszeitpunkt.

ANMERKUNGEN

Diese Handbuchseite beschreibt <tzfile.h> aus dem Glibc-Quelltext (siehe timezone/tzfile.h).

Es scheint, dass timezone tzfile intern verwendet, aber Glibc das nicht in der Anwendungsebene verfügbar macht. Der Grund ist höchstwahrscheinlich, dass die standardisierten Funktionen sinnvoller, besser portierbar und tatsächlich von Glibc dokumentiert sind. Vermutlich ist es nur in Glibc enthalten, um die nicht von Glibc (sondern einer anderen Organisation) gepflegten Zeitzonendaten zu unterstützen.

Version-2-Format

Für Zeitzonen-Dateien im Version-2-Format folgen dem oben Beschriebenen (Vorspann und Daten) ein zweiter Vorspann und Daten in einem ähnlichen Format. Der Unterschied besteht darin, dass die Übergangszeiten und Schaltsekundenzeiten jeweils mit jeweils acht Byte kodiert werden (und dass das Versionsbyte in dem Vorspann-Datensatz 0x32 statt 0x00 ist). Nach dem zweiten Header und den Daten folgt eine durch Zeilenumbrüche abgetrennte Zeichenkette im Stil von POSIX-Zeitzonen-Umgebungsvariablen. Sie ist für die Behandlung der Momente nach der letzten in der Datei gespeicherten Übergangszeit bestimmt. (Wenn es keine POSIX-Darstellung für solche Momente gibt, ist die Zeichenkette leer.)

Der zweite Abschnitt der Zeitzonendatei besteht aus einem weiteren 44-Byte-Kopfdatensatz, der in der Struktur zu dem am Anfang der Datei identisch ist, außer das er auf die folgenden Daten angewandt wird, die ebenfalls in der Struktur dem ersten Abschnitt der Zeitzonendatei entsprechen, mit den folgenden Unterschieden:

  • Die Übergangszeitwerte, nach dem Kopf, sind Achtbytewerte.
  • In jedem Schaltsekundendatensatz ist der Schaltsekundenwert ein Achtbytewert. Die aufgesammelte Schaltsekundenanzahl ist noch ein Vierbytewert.

In allen Fällen werden die Achtbytezeitwerte in der »standard«-Bytereihenfolge angegeben, das »high-order« Byte zuerst.

POSIX-Zeitzonenzeichenkette

Der zweite Achtbytezeitwerteabschnitt wird von einem optionalen dritten Abschnitt gefolgt: einem einzelnen ASCII-Zeilenumbruchzeichen ('\n'), dann einer Textzeichenkette, gefolgt von einem zweiten Zeilenumbruchzeichen. Die Textzeichenkette ist eine POSIX-Zeitzonenzeichenkette, dessen Format in der Handbuchseite tzset(3) beschrieben ist.

Die POSIX-Zeitzonenzeichenkette beschreibt eine Regel zur Berechnung der Übergangszeiten, die der letzten Übergangszeit folgen, die in der Zeitzoneninformationsdatei explizit angegeben ist.

Zusammenfassung des Zeitzoneninformationsdateiformats

Vier-Byte-Werteabschnitt
(Header Version 0x00 oder 0x32)
        Headereintrag
        Vier-Byte Übergangszeiten
        Index der Übergangszeiten
        ttinfo-Strukturen
        Feld für Zeitzonen-Abkürzungen
        Schaltsekundeneinträge
        Feld für Standard/Echtzeit
        Feld für UTC/Ortszeit
Acht-Byte-Werteabschnitt
(nur wenn im ersten Header die Version 0x32 steht,
ist auch im zweiten Header die Version 0x32)
        Headereintrag
        Acht-Byte Übergangszeiten
        Index der Übergangszeiten
        ttinfo-Strukturen
        Feld für Zeitzonen-Abkürzungen
        Schaltsekundeneinträge
        Feld für Standard/Echtzeit
        Feld für UTC/Ortszeit
Dritter Abschnitt
(optional, nur in Version 0x32 Dateien)
        Zeilenumbruchzeichen
        Zeitzonenzeichenkette
        Zeilenumbruchzeichen

SIEHE AUCH

ctime(3), tzset(3), tzselect(8),

timezone/tzfile.h in dem Glibc-Quellcode.

KOLOPHON

Diese Seite ist Teil der Veröffentlichung 4.09 des Projekts Linux-man-pages. Eine Beschreibung des Projekts, Informationen, wie Fehler gemeldet werden können sowie die aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

ÜBERSETZUNG

Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> und Helge Kreutzmann <debian@helgefjell.de> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen.

Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an <debian-l10n-german@lists.debian.org>.

7. Mai 2015