getdate(3) Library Functions Manual getdate(3) BEZEICHNUNG getdate - zerlegt eine Datum-plus-Zeit-Zeichenkette in ihre Bestandteile BIBLIOTHEK Standard-C-Bibliothek (libc, -lc) UBERSICHT #include struct tm *getdate(const char *zeichenkette); extern int getdate_err; int getdate_r(const char *restrict zeichenkette, struct tm *restrict erg); Mit Glibc erforderliche Feature-Test-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 zeichenkette weist. Die Bestandteile werden in einer tm-Struktur abgelegt. Als Funktionsergebnis wird ein Zeiger auf diese Struktur zuruckgegeben. Diese tm-Struktur wird in statischem Speicher bereitgestellt und somit bei weiteren Aufrufen von getdate() uberschrieben. Im Gegensatz zu strptime(3), (die ein Argument format hat), verwendet getdate() die Formate, die sie in der Datei findet, deren vollstandiger Pfadname in der Umgebungsvariablen DATEMSK angegeben ist. Die erste Zeile in dieser Datei, die zu der angegebenen Zeichenkette passt, wird fur die Umwandlung verwendet. Dabei wird nicht zwischen Gross- und Kleinbuchstaben unterschieden. Uberflussiger Leerraum (Whitespace) wird ignoriert, sowohl im Muster als auch in der Zeichenkette, die zerlegt werden soll. Die Umwandlungsspezifikationen, die in einem Muster enthalten sein durfen, entsprechen den in strptime(3) angegebenen. Eine weitere zulassige 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 ausschliesslich 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 spateren entspricht. getdate_r() ist eine GNU-Erweiterung, die eine ablaufinvariante Version von getdate() bereitstellt. Anstatt eine globale Variable fur Fehlerberichte und einen statischen Puffer zur Ruckgabe der heruntergebrochenen Zeit zu nutzen, gibt sie Fehler als Funktionsergebnis zuruck und verwendet zur Ausgabe der heruntergebrochenen Zeit den vom Aufrufenden bereitgestellten Puffer, auf den erg weist. RUCKGABEWERT Bei Erfolg gibt getdate() einen Zeiger zu einer struct tm zuruck. Ansonsten wird NULL zuruckgegeben und die globale Variable getdate_err mit einer der im Folgenden angegebenen Fehlernummern gesetzt. Anderungen an errno sind nicht spezifiziert. Bei Erfolg gibt getdate_r() 0 zuruck; bei Fehlern ist der Ruckgabewert eine der folgenden Fehlernummern. FEHLER Die folgenden Fehler werden mittels getdate_err (fur getdate()) oder als das Funktionsergebnis (fur getdate_r()) zuruckgegeben: 1 Die Umgebungsvariable DATEMSK ist nicht definiert oder ihr Wert ist eine leere Zeichenkette. 2 Die durch DATEMSK angegebene Vorlagendatei konnte nicht zum Lesen geoffnet werden. 3 Der Dateistatus konnte nicht ermittelt werden. 4 Die Vorlagendatei ist keine regulare Datei. 5 Wahrend des Lesens der Vorlagendatei ist ein Fehler aufgetreten. 6 Speicherzuordnung fehlgeschlagen (nicht ausreichend Speicher verfugbar) 7 Keine Zeile in der Datei passt zur Eingabe. 8 ungultige Beschreibung in der Eingabe UMGEBUNGSVARIABLEN DATEMSK Datei, die Formatmuster enthalt TZ LC_TIME Variablen, die von strptime(3) verwendet werden ATTRIBUTE Siehe attributes(7) fur eine Erlauterung der in diesem Abschnitt verwandten Ausdrucke. +--------------+-------------------------+-----------------------------+ |Schnittstelle | Attribut | Wert | +--------------+-------------------------+-----------------------------+ |getdate() | Multithread-Fahigkeit | MT-Unsicher race:getdate | | | | env locale | +--------------+-------------------------+-----------------------------+ |getdate_r() | Multithread-Fahigkeit | MT-Sicher env locale | +--------------+-------------------------+-----------------------------+ VERSIONEN Die Beschreibung in POSIX.1 fur strptime(3) enthalt Beschreibungen fur Umwandlungen, welche die Modifizierer %E und %O verwenden, wahrend es solche Beschreibungen fur getdate() nicht gibt. Die Glibc implementiert getdate() mittels strptime(3), sodass beide die gleichen Umwandlungen unterstutzen. STANDARDS POSIX.1-2008. GESCHICHTE POSIX.1-2001. BEISPIELE Das folgende Programm ruft getdate() fur jedes seiner Befehlszeilen-Argumente auf und gibt fur jeden Aufruf die Werte der Felder in der zuruckgegebenen tm-Struktur aus. Die folgende Shell-Sitzung demonstriert die Nutzung des Programms: $ TFILE=$PWD/tfile $ echo '%A' > $TFILE # vollstandiger Name des Wochentags $ echo '%T' >> $TFILE # Zeit (HH:MM:SS) $ echo '%F' >> $TFILE # ISO-Datum (YYYY-MM-DD) $ date $ export DATEMSK=$TFILE $ ./a.out Tuesday '2009-12-28' '12:22:33' Sun Sep 7 06:03:36 CEST 2008 Aufruf 1 ("Tuesday") erfolgreich: 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 Aufruf 2 ("2009-12-28") erfolgreich: 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 Aufruf 3 ("12:22:33") erfolgreich: 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 #include #include 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("Call %zu failed; getdate_err = %d\n", j, getdate_err); continue; } printf("Call %zu (\"%s\") succeeded:\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) UBERSETZUNG Die deutsche Ubersetzung dieser Handbuchseite wurde von Martin Schulze , Martin Eberhard Schauer und Mario Blattermann erstellt. Diese Ubersetzung ist Freie Dokumentation; lesen Sie die GNU General Public License Version 3 oder neuer bezuglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG ubernommen. Wenn Sie Fehler in der Ubersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die Mailingliste der Ubersetzer . Linux man-pages 6.06 31. Oktober 2023 getdate(3)