GETDATE(3)

BEZEICHNUNG
getdate - zerlegt eine Datum-plus-Zeit-Zeichenkette in ihre Bestandteile

BIBLIOTHEK
Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT
#include <time.h>

struct tm *getdate(const char *string);

extern int getdate_err;

int getdate_r(const char *restrict string, struct tm *restrict res);

    Mit Glibc erforderliche Makros (siehe feature_test_macros(7)):

getdate():
    _XOPEN_SOURCE >= 500

getdate_r():
    _GNU_SOURCE

BESCHREIBUNG
Die Funktion getdate() zerlegt eine als Zeichenkette gegebene Darstellung von Datum und Uhrzeit in ihre Bestandteile. Die Zeichenkette befindet sich in dem Puffer, auf den string weist. Die Bestandteile werden in einer tm-Struktur abgelegt. Als Funktionsergebnis wird ein Zeiger auf diese Struktur zurückgegeben. Diese tm-Struktur wird in statischem Speicher bereitgestellt und somit bei weiteren Aufrufen von getdate() überschrieben.

Im Gegensatz zu strptime(3), (die ein Argument format hat), verwendet getdate() die Formate, die sie in der Datei findet, deren vollständiger Pfadname in der Umgebungsvariablen DATEMSK angegeben ist. Die erste Zeile in dieser Datei, die zu der angegebenen Zeichenkette passt, wird für die Umwandlung verwendet.

Dabei wird nicht zwischen Groß- und Kleinbuchstaben unterschieden. Überflüssiger Leerraum (Whitespace) wird ignoriert, sowohl im Muster als auch in der Zeichenkette, die zerlegt werden soll.

Die Umwandlungsspezifikationen, die in einem Muster enthalten sein dürfen, entsprechen den in strptime(3) angegebenen. Eine weitere zulässige Spezifikation ist in POSIX.1-2001 angegeben:

%Z  Name der Zeitzone; in Glibc nicht implementiert

Wenn %Z angegeben wird, wird die Struktur, welche die heruntergebrochene Zeit beherbergt, mit der aktuellen Zeit in der angegebenen Zeitzone initialisiert. Ansonsten wird sie mit der heruntergebrochenen Zeit der aktuellen lokalen Zeit initialisiert (durch einen Aufruf von localtime(3)).

Wenn nur ein Wochentag angegeben wurde, wird er als erster solcher Tag am oder nach dem heutigen Tag angesehen.

Wenn ausschließlich der Monat angegeben wird (und kein Jahr), wird der erste gleichnamige Monat genommen, der dem aktuellen oder einem nachfolgenden Monat entspricht. Wenn kein Tag angegeben wird, wird der erste Tag des Monats angenommen.

Wenn keine Stunde, Minute und Sekunde angegeben wird, werden die aktuelle Stunde, Minute und Sekunde verwendet.

Wenn kein Datum angegeben wird, jedoch die Stunde bekannt ist, dann wird die Stunde genommen, die der aktuellen oder einer späteren entspricht.

getdate_r() ist eine GNU-Erweiterung, die eine ablaufinvariante Version von getdate() bereitstellt. Anstatt eine globale Variable für Fehlerberichte und einen statischen Puffer zur Rückgabe der heruntergebrochenen Zeit zu nutzen, gibt sie Fehler als Funktionsergebnis zurück und verwendet zur Ausgabe der heruntergebrochenen Zeit den vom Aufrufenden bereitgestellten Puffer, auf den res weist.

RÜCKGABEWERT
Bei Erfolg gibt getdate() einen Zeiger zu einer struct tm zurück. Ansonsten wird NULL zurückgegeben und die globale Variable getdate_err mit einer der im Folgenden angegebenen Fehlernummern gesetzt. Änderungen an errno sind nicht spezifiziert.

Bei Erfolg gibt getdate_r() 0 zurück; bei Fehlern ist der Rückgabewert eine der folgenden Fehlernummern.

FEHLER
Die folgenden Fehler werden mittels getdate_err (für getdate()) oder als das Funktionsergebnis (für getdate_r()) zurückgegeben:

1   Die Umgebungsvariable DATEMSK ist nicht definiert oder ihr Wert ist eine leere Zeichenkette.

2   Die durch DATEMSK angegebene Vorlagendatei konnte nicht zum Lesen geöffnet werden.

3   Der Dateistatus konnte nicht ermittelt werden.

4   Die Vorlagendatei ist keine reguläre Datei.

5   Während des Lesens der Vorlagendatei ist ein Fehler aufgetreten.

6   Speicherzuordnung fehlgeschlagen (nicht ausreichend Speicher verfügbar)

7   Keine Zeile in der Datei passt zur Eingabe.

8   ungültige Beschreibung in der Eingabe

UMGEBUNGSVARIABLEN

DATEMSK
    Datei, die Formatmuster enthält

TZ, LC_TIME
    Variablen, die von strptime(3) verwendet werden

ATTRIBUTE
Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
Schnittstelle | Attribut | Wert
getdate() | Multithread-Fähigkeit | MT-Unsafe race:getdate env locale
getdate_r() | Multithread-Fähigkeit | MT-Safe env locale

STANDARDS
POSIX.1-2001, POSIX.1-2008.

ANMERKUNGEN
Die Beschreibung in POSIX.1 für strptime(3) enthält Beschreibungen für Umwandlungen, welche die Modifizierer %E und %O verwenden, während es solche Beschreibungen für getdate() nicht gibt. Die Glibc implementiert getdate() mittels strptime(3), sodass beide die gleichen Umwandlungen unterstützen.

BEISPIELE
Das folgende Programm ruft getdate() für jedes seiner Befehlszeilen-Argumente auf und gibt für jeden Aufruf die Werte der Felder in der zurückgegebenen tm-Struktur aus. Die folgende Shell-Sitzung demonstriert die Nutzung des Programms:

    $ TFILE=$PWD/tfile
    $ echo '%A' > $TFILE       # Full name of the day of the week
    $ echo '%T' >> $TFILE      # Time (HH:MM:SS)
    $ echo '%F' >> $TFILE      # ISO date (YYYY-MM-DD)
    $ date
    $ export DATEMSK=$TFILE
    $ ./a.out Tuesday '2009-12-28' '12:22:33'
    Sun Sep  7 06:03:36 CEST 2008
    Call 1 ("Tuesday") succeeded:
        tm_sec   = 36
        tm_min   = 3
        tm_hour  = 6
        tm_mday  = 9
        tm_mon   = 8
        tm_year  = 108
        tm_wday  = 2
        tm_yday  = 252
        tm_isdst = 1
    Call 2 ("2009-12-28") succeeded:
        tm_sec   = 36
        tm_min   = 3
        tm_hour  = 6
        tm_mday  = 28
        tm_mon   = 11
        tm_year  = 109
        tm_wday  = 1
        tm_yday  = 361
        tm_isdst = 0
    Call 3 ("12:22:33") succeeded:
        tm_sec   = 33
        tm_min   = 22
        tm_hour  = 12
        tm_mday  = 7
        tm_mon   = 8
        tm_year  = 108
        tm_wday  = 0
        tm_yday  = 250
        tm_isdst = 1

  Programmquelltext
    #define _GNU_SOURCE
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    int
    main(int argc, char *argv[])
    {
        struct tm *tmp;
        for (size_t j = 1; j < argc; j++) {
            tmp = getdate(argv[j]);
            if (tmp == NULL) {
                printf("Aufruf %d fehlgeschlagen; getdate_err = %d\n",
                       j, getdate_err);
                continue;
            }
            printf("Aufruf %zu (\"%s\") erfolgreich:\n", j, argv[j]);
            printf("    tm_sec   = %d\n", tmp->tm_sec);
            printf("    tm_min   = %d\n", tmp->tm_min);
            printf("    tm_hour  = %d\n", tmp->tm_hour);
            printf("    tm_mday  = %d\n", tmp->tm_mday);
            printf("    tm_mon   = %d\n", tmp->tm_mon);
            printf("    tm_year  = %d\n", tmp->tm_year);
            printf("    tm_wday  = %d\n", tmp->tm_wday);
            printf("    tm_yday  = %d\n", tmp->tm_yday);
            printf("    tm_isdst = %d\n", tmp->tm_isdst);
        }
        exit(EXIT_SUCCESS);
    }

SIEHE AUCH
time(2), localtime(3), setlocale(3), strftime(3), strptime(3)

ÜBERSETZUNG
Die deutsche Übersetzung dieser Handbuchseite wurde von Martin Schulze <joey@infodrom.org>, Martin Eberhard Schauer <Martin.E.Schauer@gmx.de> und Mario Blättermann <mario.blaettermann@gmail.com> erstellt.

Diese Übersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 (https://www.gnu.org/licenses/gpl-3.0.html) 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 die Mailingliste der Übersetzer (debian-l10n-german@lists.debian.org).