Provided by: manpages-de-dev_4.29.1-1_all bug

BEZEICHNUNG

       asctime, ctime, gmtime, localtime, mktime - Datum und Zeit in aufgeschlüsselte Zeit oder ASCII umwandeln

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <time.h>

       char *asctime(const struct tm *tm);
       char *asctime_r(const struct tm *restrict tm,
                           char Puffer[restrict 26]);

       char *ctime(const time_t *Zeitz);
       char *ctime_r(const time_t *restrict Zeitz,
                           char Puffer[restrict 26]);

       struct tm *gmtime(const time_t *zeitz);
       struct tm *gmtime_r(const time_t *restrict zeitz,
                           struct tm *restrict Ergebnis);

       struct tm *localtime(const time_t *zeitz);
       struct tm *localtime_r(const time_t *restrict zeitz,
                           struct tm *restrict Ergebnis);

       time_t mktime(struct tm *tm);

   Mit Glibc erforderliche Feature-Test-Makros (siehe feature_test_macros(7)):

       asctime_r(), ctime_r(), gmtime_r(), localtime_r():
       _POSIX_C_SOURCE
           || /* Glibc <= 2.19: */ _BSD_SOURCE || _SVID_SOURCE

BESCHREIBUNG

       Die Funktionen ctime(), gmtime() und localtime() benötigen ein Argument des Datentyps time_t, 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.

       Die Funktionen asctime() und mktime() benötigen jeweils ein Argument das eine aufgeschlüsselte Zeitangabe
       darstellt, die in Jahr, Monat, Tag usw. aufgeteilt ist.

       Aufgeschlüsselte Zeit wird in der Struktur tm gespeichert, die in tm(3type) beschrieben ist.

       Der Aufruf ctime(t) entspricht asctime(localtime(t)). Er konvertiert die Kalenderzeit  t  in  eine  durch
       Null beendete Zeichenkette der Form

           "Wed Jun 30 21:49:08 1993\n"

       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  tzname,  timezone  und  daylight,  als  ob tzset(3) aufgerufen worden wäre. Die
       ablaufinvariante Version ctime_r() tut dasselbe, speichert aber die Zeichenkette in  einem  vom  Benutzer
       gelieferten  Zeichenkettenpuffer,  der  Platz  für  mindestens 26 Byte haben sollte. tzname, timezone und
       daylight müssen nicht gesetzt sein.

       Die Funktion gmtime() wandelt die Kalenderzeit zeitz 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 gmtime_r()  tut
       das gleiche, speichert aber die Daten in einer vom Benutzer gelieferten Struktur.

       Die  Funktion  localtime()  wandelt die Kalenderzeit zeitz in eine aufgeschlüsselte Entsprechung der Zeit
       um, ausgedrückt relativ zu der vom Benutzer angegebenen Zeitzone. Die Funktion setzt  auch  die  externen
       Variablen  tzname,  timezone  und daylight, als ob sie tzset(3) aufriefe. Der Rückgabewert zeigt auf eine
       statisch reservierte Struktur, die von nachfolgenden Aufrufen irgendwelcher  Datums-  und  Zeitfunktionen
       überschrieben  werden kann. Die Funktion localtime_r() tut das gleiche, speichert aber die Daten in einer
       vom Benutzer gelieferten Struktur. tzname, timezone und daylight müssen nicht gesetzt sein.

       Die Funktion asctime() wandelt den aufgeschlüsselten Zeitwert tm in eine durch Null beendete Zeichenkette
       mit dem gleichen Format wie ctime(). Der Rückgabewert zeigt auf eine statisch  reservierte  Zeichenkette,
       die  von  nachfolgenden  Aufrufen irgendwelcher Datums- und Zeitfunktionen überschrieben werden kann. Die
       Funktion asctime_r() tut das gleiche, speichert aber die Zeichenkette in einem vom  Benutzer  gelieferten
       Zeichenkettenpuffer, der Platz für mindestens 26 Byte haben sollte.

       Die  Funktion  mktime() 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  tm_wday  und tm_yday mitgegeben hat, egal ob in der Zeit der mitgegebenen Struktur tm Sommerzeit
       ist oder nicht: Ein positiver Wert bedeutet, dass Sommerzeit ist, Null bedeutet,  dass  keine  Sommerzeit
       ist  und  ein  negativer  Wert bedeutet, dass mktime() (mit Zeitzoneninformationen und Systemdatenbanken)
       versuchen sollte zu bestimmen, ob zur angegebenen Zeit Sommerzeit ist oder nicht. Siehe timegm(3) für ein
       UTC-Äquivalent für diese Funktion.

       Die Funktion mktime() ändert die Felder der Struktur tm wie folgt: tm_wday und  tm_yday  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);  tm_isdst  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 tzname, timezone und daylight, als ob sie tzset(3) aufriefe.

       Falls die angegebene aufgeschlüsselte Zeit nicht als  Kalenderzeit  (Unixzeit  in  Sekunden)  dargestellt
       werden  kann,  gibt  mktime()  (time_t) -1  zurück  und  verändert  die  Elemente  der  aufgeschlüsselten
       Zeitstruktur nicht.

RÜCKGABEWERT

       Im Erfolgsfall liefern gmtime() und localtime() einen Zeiger auf ein struct tm zurück.

       Im Erfolgsfall liefern gmtime_r() und localtime_r() die Adresse  der  Struktur  zurück,  auf  die  result
       zeigt.

       Im Erfolgsfall liefern asctime() und ctime() einen Zeiger auf eine Zeichenkette zurück.

       Im Erfolgsfall liefern asctime_r() und ctime_r() einen Zeiger zurück, auf den buf zeigt.

       Im  Erfolgsfall  liefert mktime() die Kalenderzeit (Sekunden seit der Epoch) zurück, ausgedrückt als Wert
       des Typs time_t.

       Im Fehlerfall liefert  mktime()  den  Wert  (time_t) -1  zurück  und  belässt  das  Mitglied  tm->tm_wday
       unverändert.  Die  verbliebenen  Funktionen  liefern  NULL im Fehlerfall zurück. Im Fehlerfall wird errno
       gesetzt, um den Fehler anzuzeigen.

FEHLER

       EOVERFLOW
              Das Ergebnis kann nicht dargestellt werden.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.
       ┌─────────────────────────┬───────────────────────┬─────────────────────────────────────────────────────┐
       │ SchnittstelleAttributWert                                                │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ asctime()               │ Multithread-Fähigkeit │ MT-Unsicher race:asctime locale                     │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ asctime_r()             │ Multithread-Fähigkeit │ MT-Sicher locale                                    │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ ctime()                 │ Multithread-Fähigkeit │ MT-Unsicher race:tmbuf race:asctime env locale      │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ ctime_r(), gmtime_r(),  │ Multithread-Fähigkeit │ MT-Sicher env locale                                │
       │ localtime_r(), mktime() │                       │                                                     │
       ├─────────────────────────┼───────────────────────┼─────────────────────────────────────────────────────┤
       │ gmtime(), localtime()   │ Multithread-Fähigkeit │ MT-Unsicher race:tmbuf env locale                   │
       └─────────────────────────┴───────────────────────┴─────────────────────────────────────────────────────┘

VERSIONEN

       POSIX spezifiziert die Parameter von ctime_r() nicht als restrict; dies ist Glibc-spezifisch.

       In vielen Implementierungen, einschließlich Glibc, wird a 0 in tm_mday als letzter Tag des vorhergehenden
       Monats interpretiert.

       Gemäß POSIX.1 wird localtime() benötigt, um sich so zu verhalten, als  sei  tzset(3)  aufgerufen  worden,
       während  localtime_r()  nicht  diese  Anforderung  stellt.  Für  portierbaren  Code  sollte  tzset(3) vor
       localtime_r() aufgerufen werden.

STANDARDS

       asctime()
       ctime()
       gmtime()
       localtime()
       mktime()
              C23, POSIX.1-2024.

       gmtime_r()
       localtime_r()
              POSIX.1-2024.

       asctime_r()
       ctime_r()
              Keine.

GESCHICHTE

       gmtime()
       localtime()
       mktime()
              C89, POSIX.1-1988.

       asctime()
       ctime()
              C89,  POSIX.1-1988.  Wurde  in  C23  und  POSIX.1-2008  als  veraltet  markiert  (und  strftime(3)
              empfohlen).

       gmtime_r()
       localtime_r()
              POSIX.1-1996.

       asctime_r()
       ctime_r()
              POSIX.1-1996.  Wurde  in  POSIX.1-2008  als  veraltet  markiert.  Entfernt  in  POSIX.1-2024  (und
              Empfehlung für strftime(3)).

WARNUNGEN

   Multithread-Fähigkeit
       Die vier Funktionen asctime(), ctime(), gmtime() und localtime() geben einen Zeiger auf  statische  Daten
       zurück  und  sind  daher  nicht  multithread-fähig.  Multithread-fähige Versionen asctime_r(), ctime_r(),
       gmtime_r() und localtime_r werden durch SUSv2 spezifiziert.

       POSIX.1 sagt: »Die Funktionen asctime(), ctime(), gmtime() und localtime() müssen Rückgabewerte in  einem
       von  zwei  statischen  Objekten  liefern:  einer aufgeschlüsselten Zeit und einem Feld des Typs char. 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.

   mktime()
       (time_t) -1 kann eine gültige Zeit darstellen (eine Sekunde vor dem Epoch). Um zu bestimmen, ob  mktime()
       fehlgeschlagen  ist,  müssen  Sie  das  Feld  tm->tm_wday  verwenden.  Siehe dazu des Beispielprogramm in
       BEISPIELE.

       Der Umgang mit nichtnegativen tm_isdst in mktime() ist  schlecht  spezifiziert  und  die  Übergabe  eines
       Wertes,  der  für  die  festgelegte Zeit nicht korrekt ist, führt zu nicht spezifizierten Ergebnissen. Da
       mktime() eine der wenigen Funktionen ist, die  weiß,  wann  Sommerzeit  gilt,  kann  die  Übergabe  eines
       korrekten  Wertes  schwierig  sein.  Eine  Hilfskonstruktion  besteht darin, mktime() zweimal aufzurufen,
       einmal mit tm_isdst auf Null gesetzt und einmal mit tm_isdst auf einen positiven Wert  gesetzt  und  dann
       dem  Verwerfen  des  Wertes  des  Aufrufs,  der  diesen  änderte. Falls kein Aufruf tm_isdst ä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.

       DIe Spezifizierung von Zeitzonen und Sommerzeitregeln unterliegt regionalen Regierungen, ändert sich  oft
       und   könnte   solche  Sprünge  enthalten,  die  mktime  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.

BEISPIELE

       Das  nachfolgende  Programm  definiert  einen  Wrapper, der die Erkennung von ungültigen und mehrdeutigen
       Zeiten mittels EINVAL bzw. ENOTUNIQ erlaubt.

       Die nachfolgende Shell-Sitzung zeigt Beispielläufe des Programms:

           $ TZ=UTC ./a.out 1969 12 31 23 59 59 0;
           -1
           $
           $ export TZ=Europe/Madrid;
           $
           $ ./a.out 2147483647 2147483647 00 00 00 00 -1;
           a.out: mktime: Value too large for defined data type
           $
           $ ./a.out 2024 08 23 00 17 53 -1;
           1724365073
           $ ./a.out 2024 08 23 00 17 53 0;
           a.out: my_mktime: Invalid argument
           1724368673
           $ ./a.out 2024 08 23 00 17 53 1;
           1724365073
           $
           $ ./a.out 2024 02 23 00 17 53 -1;
           1708643873
           $ ./a.out 2024 02 23 00 17 53 0;
           1708643873
           $ ./a.out 2024 02 23 00 17 53 1;
           a.out: my_mktime: Invalid argument
           1708640273
           $
           $ ./a.out 2023 03 26 02 17 53 -1;
           a.out: my_mktime: Invalid argument
           1679793473
           $
           $ ./a.out 2023 10 29 02 17 53 -1;
           a.out: my_mktime: Name not unique on network
           1698542273
           $ ./a.out 2023 10 29 02 17 53 0;
           1698542273
           $ ./a.out 2023 10 29 02 17 53 1;
           1698538673
           $
           $ ./a.out 2023 02 29 12 00 00 -1;
           a.out: my_mktime: Invalid argument
           1677668400

   Programmquelltext: mktime.c

       #include <err.h>
       #include <errno.h>
       #include <stdint.h>
       #include <stdio.h>
       #include <stdlib.h>
       #include <string.h>
       #include <time.h>

       #define is_signed(T)  ((T) -1 < 1)

       static 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\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\n", (intmax_t) t);
           else
               printf("%ju\n", (uintmax_t) t);

           exit(EXIT_SUCCESS);
       }

       static 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;
       }

SIEHE AUCH

       date(1), gettimeofday(2), time(2), utime(2), clock(3), difftime(3), strftime(3), strptime(3),  timegm(3),
       tzset(3), time(7)

ÜBERSETZUNG

       Die  deutsche  Übersetzung  dieser  Handbuchseite  wurde  von  Patrick Rother <krd@gulu.net>, Chris Leick
       <c.leick@vollbio.de>,   Mario   Blättermann   <mario.blaettermann@gmail.com>   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  die
       Mailingliste der Übersetzer: debian-l10n-german@lists.debian.org.

Linux man-pages 6.16                           25. September 2025                                       ctime(3)