.\" -*- coding: UTF-8 -*- '\" t .\" Copyright 1993 David Metcalfe (david@prism.demon.co.uk) .\" .\" SPDX-License-Identifier: Linux-man-pages-copyleft .\" .\" References consulted: .\" Linux libc source code .\" Lewine's _POSIX Programmer's Guide_ (O'Reilly & Associates, 1991) .\" 386BSD man pages .\" Modified Sat Jul 24 19:49:27 1993 by Rik Faith (faith@cs.unc.edu) .\" Modified Fri Apr 26 12:38:55 MET DST 1996 by Martin Schulze (joey@linux.de) .\" Modified 2001-11-13, aeb .\" Modified 2001-12-13, joey, aeb .\" Modified 2004-11-16, mtk .\" .\"******************************************************************* .\" .\" This file was generated with po4a. Translate the source file. .\" .\"******************************************************************* .TH ctime 3 "18. Februar 2025" "Linux man\-pages 6.12" .SH BEZEICHNUNG asctime, ctime, gmtime, localtime, mktime \- Datum und Zeit in aufgeschlüsselte Zeit oder ASCII umwandeln .SH BIBLIOTHEK Standard\-C\-Bibliothek (\fIlibc\fP,\ \fI\-lc\fP) .SH ÜBERSICHT .nf \fB#include \fP .P \fBchar *asctime(const struct tm *\fP\fItm\fP\fB);\fP \fBchar *asctime_r(const struct tm *restrict \fP\fItm\fP\fB,\fP \fB char \fP\fIPuffer\fP\fB[restrict 26]);\fP .P \fBchar *ctime(const time_t *\fP\fIZeitz\fP\fB);\fP \fBchar *ctime_r(const time_t *restrict \fP\fIZeitz\fP\fB,\fP \fB char \fP\fIPuffer\fP\fB[restrict 26]);\fP .P \fBstruct tm *gmtime(const time_t *\fP\fIzeitz\fP\fB);\fP \fBstruct tm *gmtime_r(const time_t *restrict \fP\fIzeitz\fP\fB,\fP \fB struct tm *restrict \fP\fIErgebnis\fP\fB);\fP .P \fBstruct tm *localtime(const time_t *\fP\fIzeitz\fP\fB);\fP \fBstruct tm *localtime_r(const time_t *restrict \fP\fIzeitz\fP\fB,\fP \fB struct tm *restrict \fP\fIErgebnis\fP\fB);\fP .P \fBtime_t mktime(struct tm *\fP\fItm\fP\fB);\fP .fi .P .RS -4 Mit Glibc erforderliche Feature\-Test\-Makros (siehe \fBfeature_test_macros\fP(7)): .RE .P \fBasctime_r\fP(), \fBctime_r\fP(), \fBgmtime_r\fP(), \fBlocaltime_r\fP(): .nf _POSIX_C_SOURCE || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE .fi .SH BESCHREIBUNG Die Funktionen \fBctime\fP(), \fBgmtime\fP() und \fBlocaltime\fP() benötigen ein Argument des Datentyps \fItime_t\fP, welches die Kalenderzeit darstellt. Wenn sie als absoluter Zeitwert interpretiert wird, stellt sie die Unixzeit dar, die Sekunden, die seit dem 1. Januar 1970, 00:00.00 Uhr koordinierter Weltzeit (UTC) verstrichen sind. .P Die Funktionen \fBasctime\fP() und \fBmktime\fP() benötigen jeweils ein Argument das eine aufgeschlüsselte Zeitangabe darstellt, die in Jahr, Monat, Tag usw. aufgeteilt ist. .P Aufgeschlüsselte Zeit wird in der Struktur \fItm\fP gespeichert, die in \fBtm\fP(3type) beschrieben ist. .P Der Aufruf \fBctime(\fP\fIt\fP\fB)\fP entspricht \fBasctime(localtime(\fP\fIt\fP\fB))\fP. Er konvertiert die Kalenderzeit \fIt\fP in eine durch Null beendete Zeichenkette der Form .P .in +4n .EX "Wed Jun 30 21:49:08 1993\[rs]n" .EE .in .P Die Abkürzungen für die Wochentage sind »Sun«, »Mon«, »Tue«, »Wed«, »Thu«, »Fri« und »Sat«. Die Abkürzungen für die Monate sind »Jan«, »Feb«, »Mar«, »Apr«, »May«, »Jun«, »Jul«, »Aug«, »Sep«, »Oct«, »Nov« und »Dec«. Der Rückgabewert zeigt auf eine statisch reservierte Zeichenkette, die durch nachfolgende Aufrufe von Datums\- und Zeitfunktionen überschrieben werden darf. Die Funktion setzt auch die externen Variablen \fItzname\fP, \fItimezone\fP und \fIdaylight\fP, als ob \fBtzset\fP(3) aufgerufen worden wäre. Die ablaufinvariante Version \fBctime_r\fP() tut dasselbe, speichert aber die Zeichenkette in einem vom Benutzer gelieferten Zeichenkettenpuffer, der Platz für mindestens 26 Byte haben sollte. \fItzname\fP, \fItimezone\fP und \fIdaylight\fP müssen nicht gesetzt sein. .P Die Funktion \fBgmtime\fP() wandelt die Kalenderzeit \fIzeitz\fP in eine aufgeschlüsselte Entsprechung der Zeit um, die in koordinierter Weltzeit (UTC) ausgedrückt wird. Sie kann NULL zurückgeben, wenn das Jahr nicht in eine Ganzzahl passt. Der Rückgabewert zeigt auf eine statisch reservierte Struktur, die von nachfolgenden Aufrufen irgendwelcher Datums\- und Zeitfunktionen überschrieben werden kann. Die Funktion \fBgmtime_r\fP() tut das gleiche, speichert aber die Daten in einer vom Benutzer gelieferten Struktur. .P Die Funktion \fBlocaltime\fP() wandelt die Kalenderzeit \fIzeitz\fP in eine aufgeschlüsselte Entsprechung der Zeit um, ausgedrückt relativ zu der vom Benutzer angegebenen Zeitzone. Die Funktion setzt auch die externen Variablen \fItzname\fP, \fItimezone\fP und \fIdaylight\fP, als ob sie \fBtzset\fP(3) aufriefe. Der Rückgabewert zeigt auf eine statisch reservierte Struktur, die von nachfolgenden Aufrufen irgendwelcher Datums\- und Zeitfunktionen überschrieben werden kann. Die Funktion \fBlocaltime_r\fP() tut das gleiche, speichert aber die Daten in einer vom Benutzer gelieferten Struktur. \fItzname\fP, \fItimezone\fP und \fIdaylight\fP müssen nicht gesetzt sein. .P Die Funktion \fBasctime\fP() wandelt den aufgeschlüsselten Zeitwert \fItm\fP in eine durch Null beendete Zeichenkette mit dem gleichen Format wie \fBctime\fP(). Der Rückgabewert zeigt auf eine statisch reservierte Zeichenkette, die von nachfolgenden Aufrufen irgendwelcher Datums\- und Zeitfunktionen überschrieben werden kann. Die Funktion \fBasctime_r\fP() tut das gleiche, speichert aber die Zeichenkette in einem vom Benutzer gelieferten Zeichenkettenpuffer, der Platz für mindestens 26 Byte haben sollte. .P Die Funktion \fBmktime\fP() wandelt die aufgeschlüsselten Zeitstruktur, die als lokale Zeit ausgedrückt wird, in eine Entsprechung der Kalenderzeit. Die Funktion ignoriert die Werte, die der Aufrufende in den Feldern \fItm_wday\fP und \fItm_yday\fP mitgegeben hat, egal ob in der Zeit der mitgegebenen Struktur \fItm\fP Sommerzeit ist oder nicht: Ein positiver Wert bedeutet, dass Sommerzeit ist, Null bedeutet, dass keine Sommerzeit ist und ein negativer Wert bedeutet, dass \fBmktime\fP() (mit Zeitzoneninformationen und Systemdatenbanken) versuchen sollte zu bestimmen, ob zur angegebenen Zeit Sommerzeit ist oder nicht. Siehe \fBtimegm\fP(3) für ein UTC\-Äquivalent für diese Funktion. .P Die Funktion \fBmktime\fP() ändert die Felder der Struktur \fItm\fP wie folgt: \fItm_wday\fP und \fItm_yday\fP werden auf die Werte gesetzt, die vom Inhalt anderer Felder bestimmt werden; falls Elemente der Stuktur außerhalb ihres erlaubten Intervalls liegen, werden sie normalisiert (so dass zum Beispiel der 40. Oktober auf 9. November geändert wird); \fItm_isdst\fP wird (unabhängig vom anfänglichen Wert) auf einen positiven Wert beziehungsweise 0 gesetzt, um anzuzeigen, ob zur angegebenen Zeit Sommerzeit ist oder nicht. Die Funktion setzt auch die externen Variablen \fItzname\fP, \fItimezone\fP und \fIdaylight\fP, als ob sie \fBtzset\fP(3) aufriefe. .P Falls die angegebene aufgeschlüsselte Zeit nicht als Kalenderzeit (Unixzeit in Sekunden) dargestellt werden kann, gibt \fBmktime\fP() \fI(time_t)\ \-1\fP zurück und verändert die Elemente der aufgeschlüsselten Zeitstruktur nicht. .SH RÜCKGABEWERT Im Erfolgsfall liefern \fBgmtime\fP() und \fBlocaltime\fP() einen Zeiger auf ein \fIstruct\ tm\fP zurück. .P Im Erfolgsfall liefern \fBgmtime_r\fP() und \fBlocaltime_r\fP() die Adresse der Struktur zurück, auf die \fIresult\fP zeigt. .P Im Erfolgsfall liefern \fBasctime\fP() und \fBctime\fP() einen Zeiger auf eine Zeichenkette zurück. .P Im Erfolgsfall liefern \fBasctime_r\fP() und \fBctime_r\fP() einen Zeiger zurück, auf den \fIbuf\fP zeigt. .P Im Erfolgsfall liefert \fBmktime\fP() die Kalenderzeit (Sekunden seit der Epoch) zurück, ausgedrückt als Wert des Typs \fItime_t\fP. .P Im Fehlerfall liefert \fBmktime\fP() den Wert \fI(time_t)\ \-1\fP zurück und belässt das Mitglied \fItm\->tm_wday\fP unverändert. Die verbliebenen Funktionen liefern NULL im Fehlerfall zurück. Im Fehlerfall wird \fIerrno\fP gesetzt, um den Fehler anzuzeigen. .SH FEHLER .TP \fBEOVERFLOW\fP Das Ergebnis kann nicht dargestellt werden. .SH ATTRIBUTE Siehe \fBattributes\fP(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke. .TS allbox; lb lb lbx l l l. Schnittstelle Attribut Wert T{ .na .nh \fBasctime\fP() T} Multithread\-Fähigkeit T{ .na .nh MT\-Unsicher race:asctime locale T} T{ .na .nh \fBasctime_r\fP() T} Multithread\-Fähigkeit T{ .na .nh MT\-Sicher locale T} T{ .na .nh \fBctime\fP() T} Multithread\-Fähigkeit T{ .na .nh MT\-Unsicher race:tmbuf race:asctime env locale T} T{ .na .nh \fBctime_r\fP(), \fBgmtime_r\fP(), \fBlocaltime_r\fP(), \fBmktime\fP() T} Multithread\-Fähigkeit T{ .na .nh MT\-Sicher env locale T} T{ .na .nh \fBgmtime\fP(), \fBlocaltime\fP() T} Multithread\-Fähigkeit T{ .na .nh MT\-Unsicher race:tmbuf env locale T} .TE .SH VERSIONEN POSIX spezifiziert die Parameter von \fBctime_r\fP() nicht als \fIrestrict\fP; dies ist Glibc\-spezifisch. .P In vielen Implementierungen, einschließlich Glibc, wird a 0 in \fItm_mday\fP als letzter Tag des vorhergehenden Monats interpretiert. .P .\" See http://thread.gmane.org/gmane.comp.time.tz/2034/ Gemäß POSIX.1 wird \fBlocaltime\fP() benötigt, um sich so zu verhalten, als sei \fBtzset\fP(3) aufgerufen worden, während \fBlocaltime_r\fP() nicht diese Anforderung stellt. Für portierbaren Code sollte \fBtzset\fP(3) vor \fBlocaltime_r\fP() aufgerufen werden. .SH STANDARDS .TP \fBasctime\fP() .TQ \fBctime\fP() .TQ \fBgmtime\fP() .TQ \fBlocaltime\fP() .TQ \fBmktime\fP() C23, POSIX.1\-2024. .TP \fBgmtime_r\fP() .TQ \fBlocaltime_r\fP() POSIX.1\-2024. .TP \fBasctime_r\fP() .TQ \fBctime_r\fP() Keine. .SH GESCHICHTE .TP \fBgmtime\fP() .TQ \fBlocaltime\fP() .TQ \fBmktime\fP() C89, POSIX.1\-1988. .TP \fBasctime\fP() .TQ \fBctime\fP() C89, POSIX.1\-1988. Wurde in C23 und POSIX.1\-2008 als veraltet markiert (und \fBstrftime\fP(3) empfohlen). .TP \fBgmtime_r\fP() .TQ \fBlocaltime_r\fP() POSIX.1\-1996. .TP \fBasctime_r\fP() .TQ \fBctime_r\fP() POSIX.1\-1996. Wurde in POSIX.1\-2008 als veraltet markiert. Entfernt in POSIX.1\-2024 (und Empfehlung für \fBstrftime\fP(3)). .SH WARNUNGEN .SS Multithread\-Fähigkeit Die vier Funktionen \fBasctime\fP(), \fBctime\fP(), \fBgmtime\fP() und \fBlocaltime\fP() geben einen Zeiger auf statische Daten zurück und sind daher nicht multithread\-fähig. Multithread\-fähige Versionen \fBasctime_r\fP(), \fBctime_r\fP(), \fBgmtime_r\fP() und \fBlocaltime_r\fP werden durch SUSv2 spezifiziert. .P POSIX.1 sagt: »Die Funktionen \fBasctime\fP(), \fBctime\fP(), \fBgmtime\fP() und \fBlocaltime\fP() müssen Rückgabewerte in einem von zwei statischen Objekten liefern: einer aufgeschlüsselten Zeit und einem Feld des Typs \fIchar\fP. Das Ausführen irgendeiner der Funktionen, die einen Zeiger auf einen dieser Objekttypen zurückliefert, können die Informationen in jedem Objekt des gleichen Typs überschreiben, auf den durch den zurückgelieferten Werte von einem vorherigen Aufruf von einem von ihnen gezeigt wird.« Dies kann in der Glibc\-Implementierung vorkommen. .SS mktime() \fI(time_t) \-1\fP kann eine gültige Zeit darstellen (eine Sekunde vor dem Epoch). Um zu bestimmen, ob \fBmktime\fP() fehlgeschlagen ist, müssen Sie das Feld \fItm\->tm_wday\fP verwenden. Siehe dazu des Beispielprogramm in BEISPIELE. .P Der Umgang mit nicht negativen \fItm_isdst\fP in \fBmktime\fP() ist schlecht spezifiziert und die Übergabe eines Wertes, der für die festgelegte Zeit nicht korrekt ist, führt zu nicht spezifizierten Ergebnissen. Da \fBmktime\fP() eine der wenigen Funktionen ist, die weiß, wann Sommerzeit gilt, kann die Übergabe eines korrekten Wertes schwierig sein. Eine Hilfskonstruktion besteht darin, \fBmktime\fP() zweimal aufzurufen, einmal mit \fItm_isdst\fP auf Null gesetzt und einmal mit \fItm_isdst\fP auf einen positiven Wert gesetzt und dann dem Verwerfen des Wertes des Aufrufs, der diesen änderte. Falls kein Aufruf \fItm_isdst\fP ändert, dann passiert die angegebene Zeit wahrscheinlich während einer Rückfallperiode, zu der Sommerzeit beginnt oder endet und beide Ergebnisse sind gültig, stellen aber verschiedene Zeiten dar. Falls beide Aufrufe sie ändern, könnte das einen vorwärts fallenden Übergang darstellen oder einen anderen Grund, warum die angegebene Zeit nicht existiert. .P DIe Spezifizierung von Zeitzonen und Sommerzeitregeln unterliegt regionalen Regierungen, ändert sich oft und könnte solche Sprünge enthalten, die \fImktime\fP als Ergebnis nicht mehr dokumentieren kann. Beispielsweise könnte eine Änderung in der Zeitzonendefinition dazu führen, dass eine Uhrzeit wiederholt oder übersprungen wird, ohne dass eine entsprechende Sommerzeitregelung vorliegt. .SH BEISPIELE Das nachfolgende Programm definiert einen Wrapper, der die Erkennung von ungültigen und mehrdeutigen Zeiten mittels \fBEINVAL\fP bzw. \fBENOTUNIQ\fP erlaubt. .P Die nachfolgende Shell\-Sitzung zeigt Beispielläufe des Programms: .P .in +4n .EX $\ \fBTZ=UTC ./a.out 1969 12 31 23 59 59 0\fP; \-1 $ $\ \fBexport TZ=Europe/Madrid\fP; $ $\ \fB./a.out 2147483647 2147483647 00 00 00 00 \-1\fP; a.out: mktime: Value too large for defined data type $ $\ \fB./a.out 2024 08 23 00 17 53 \-1\fP; 1724365073 $\ \fB./a.out 2024 08 23 00 17 53 0\fP; a.out: my_mktime: Invalid argument 1724368673 $\ \fB./a.out 2024 08 23 00 17 53 1\fP; 1724365073 $ $\ \fB./a.out 2024 02 23 00 17 53 \-1\fP; 1708643873 $\ \fB./a.out 2024 02 23 00 17 53 0\fP; 1708643873 $\ \fB./a.out 2024 02 23 00 17 53 1\fP; a.out: my_mktime: Invalid argument 1708640273 $ $\ \fB./a.out 2023 03 26 02 17 53 \-1\fP; a.out: my_mktime: Invalid argument 1679793473 $ $\ \fB./a.out 2023 10 29 02 17 53 \-1\fP; a.out: my_mktime: Name not unique on network 1698542273 $\ \fB./a.out 2023 10 29 02 17 53 0\fP; 1698542273 $\ \fB./a.out 2023 10 29 02 17 53 1\fP; 1698538673 $ $\ \fB./a.out 2023 02 29 12 00 00 \-1\fP; a.out: my_mktime: Invalid argument 1677668400 .EE .SS "Programmquelltext: mktime.c" .\" SRC BEGIN (mktime.c) \& .EX #include #include #include #include #include #include #include \& #define is_signed(T) ((T) \-1 < 1) \& time_t my_mktime(struct tm *tp); \& int main(int argc, char *argv[]) { char **p; time_t t; struct tm tm; \& if (argc != 8) { fprintf(stderr, "Aufruf: %s yyyy mm dd HH MM SS isdst\[rs]n", argv[0]); exit(EXIT_FAILURE); } \& p = &argv[1]; tm.tm_year = atoi(*p++) \- 1900; tm.tm_mon = atoi(*p++) \- 1; tm.tm_mday = atoi(*p++); tm.tm_hour = atoi(*p++); tm.tm_min = atoi(*p++); tm.tm_sec = atoi(*p++); tm.tm_isdst = atoi(*p++); \& errno = 0; tm.tm_wday = \-1; t = my_mktime(&tm); if (tm.tm_wday == \-1) err(EXIT_FAILURE, "mktime"); if (errno == EINVAL || errno == ENOTUNIQ) warn("my_mktime"); \& if (is_signed(time_t)) printf("%jd\[rs]n", (intmax_t) t); else printf("%ju\[rs]n", (uintmax_t) t); \& exit(EXIT_SUCCESS); } \& time_t my_mktime(struct tm *tp) { int e, isdst; time_t t; struct tm tm; unsigned char wday[sizeof(tp\->tm_wday)]; \& e = errno; \& tm = *tp; isdst = tp\->tm_isdst; \& memcpy(wday, &tp\->tm_wday, sizeof(wday)); tp\->tm_wday = \-1; t = mktime(tp); if (tp\->tm_wday == \-1) { memcpy(&tp\->tm_wday, wday, sizeof(wday)); return \-1; } \& if (isdst == \-1) tm.tm_isdst = tp\->tm_isdst; \& if ( tm.tm_sec != tp\->tm_sec || tm.tm_min != tp\->tm_min || tm.tm_hour != tp\->tm_hour || tm.tm_mday != tp\->tm_mday || tm.tm_mon != tp\->tm_mon || tm.tm_year != tp\->tm_year || tm.tm_isdst != tp\->tm_isdst) { errno = EINVAL; return t; } \& if (isdst != \-1) goto out; \& tm = *tp; tm.tm_isdst = !tm.tm_isdst; \& tm.tm_wday = \-1; mktime(&tm); if (tm.tm_wday == \-1) goto out; \& if (tm.tm_isdst != tp\->tm_isdst) { errno = ENOTUNIQ; return t; } out: errno = e; return t; } .EE .\" SRC END .SH "SIEHE AUCH" \fBdate\fP(1), \fBgettimeofday\fP(2), \fBtime\fP(2), \fButime\fP(2), \fBclock\fP(3), \fBdifftime\fP(3), \fBstrftime\fP(3), \fBstrptime\fP(3), \fBtimegm\fP(3), \fBtzset\fP(3), \fBtime\fP(7) .PP .SH ÜBERSETZUNG Die deutsche Übersetzung dieser Handbuchseite wurde von Patrick Rother , Chris Leick , Mario Blättermann und Helge Kreutzmann erstellt. .PP Diese Übersetzung ist Freie Dokumentation; lesen Sie die .UR https://www.gnu.org/licenses/gpl-3.0.html GNU General Public License Version 3 .UE oder neuer bezüglich der Copyright-Bedingungen. Es wird KEINE HAFTUNG übernommen. .PP Wenn Sie Fehler in der Übersetzung dieser Handbuchseite finden, schicken Sie bitte eine E-Mail an die .MT debian-l10n-german@lists.debian.org Mailingliste der Übersetzer .ME .