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

BEZEICHNUNG

       strftime - formatiert Datum und Uhrzeit

BIBLIOTHEK

       Standard-C-Bibliothek (libc, -lc)

ÜBERSICHT

       #include <time.h>

       size_t strftime(char s[restrict .max], size_t max,
                       const char *restrict format,
                       const struct tm *restrict tm);

       size_t strftime_l(char s[restrict .max], size_t max,
                       const char *restrict format,
                       const struct tm *restrict tm,
                       locale_t locale);

BESCHREIBUNG

       Die   Funktion   strftime()   formatiert   die   zerlegte   Zeit   tm   entsprechend   der
       Formatbeschreibung format und schreibt das Ergebnis in das  Feld  s  der  Größe  max.  Die
       zerlegte Zeitstruktur tm wird in <time.h> definiert. Siehe auch ctime(3).

       Die   Formatbeschreibung   ist  eine  null-terminierte  Zeichenkette  und  kann  spezielle
       Zeichenfolgen (sogenannte Konvertierungskennzeichner) enthalten, von denen jede mit  einem
       Zeichen »%« beginnt und mit einem anderen Zeichen endet, welches die Art der Konvertierung
       beschreibt (Umwandlungskennzeichnungszeichen). Alle weiteren  Zeichenfolgen  sind  normale
       Zeichenfolgen.

       Die  Zeichen einfacher Zeichenfolgen (einschließlich des Nullbytes) werden wortgetreu nach
       s kopiert. Die Zeichen von Konvertierungsanweisungen werden jedoch wie  in  der  folgenden
       Liste dargestellt ersetzt. In dieser Liste werden die von der Struktur tm bereitgestellten
       Felder auch gezeigt.

       %a     Der abgekürzte Name des Wochentags  gemäß  der  momentanen  Locale  (berechnet  aus
              tm_wday).  (Die  in  der momentanen Locale verwandten speziellen Namen können durch
              einen Aufruf von nl_langinfo(3) mit dem Argument ABDAY_{17} erhalten werden.)

       %A     Der vollständige Name des Wochentags gemäß der  momentanen  Locale  (berechnet  von
              tm_wday).  (Die  in  der momentanen Locale verwandten speziellen Namen können durch
              einen Aufruf von nl_langinfo(3) mit dem Argument DAY_{17} erhalten werden.)

       %b     Der abgekürzte Monatsname gemäß der momentanen Locale (berechnet von tm_mon).  (Die
              in  der momentanen Locale verwandten speziellen Namen können durch einen Aufruf von
              nl_langinfo(3) mit dem Argument ABMON_{112} erhalten werden.)

       %B     Der vollständige Monatsname gemäß der momentanen  Locale  (berechnet  von  tm_mon).
              (Die in der momentanen Locale verwandten speziellen Namen können durch einen Aufruf
              von nl_langinfo(3) mit dem Argument MON_{112} erhalten werden.)

       %c     Die für die momentane Locale bevorzugte Datums- und Uhrzeitdarstellung. (Die in der
              momentanen  Locale  verwandten  speziellen  Namen  können  durch  einen  Aufruf von
              nl_langinfo(3) für den Konvertierungskennzeichner %c mit dem Argument  D_T_FMT  und
              für  den  Konvertierungskennzeichner  %Ec  mit  dem  Argument  ERA_D_T_FMT erhalten
              werden.) (In der POSIX-Locale ist dies zu %a %b %e %H:%M:%S %Y äquivalent.)

       %C     Das Jahrhundert als zweistellige Zahl  (Jahr/100)  (der  Konvertierungskennzeichner
              %EC entspricht dem Namen der Ära) (berechnet aus tm_year). (SU)

       %d     Der Tag im Monat als Dezimalzahl (Bereich 01-31) (berechnet aus tm_mday).

       %D     Äquivalent  zu %m/%d/%y. (US-amerikanisches Format. In anderen Ländern ist %d/%m/%y
              eher üblich. In internationalem Kontext ist  dieses  Format  daher  mehrdeutig  und
              sollte nicht verwendet werden.) (SU)

       %e     Wie  %d,  der  Tag  im Monat als Dezimalzahl, aber eine führende Null ist durch ein
              Leerzeichen ersetzt (berechnet aus tm_mday). (SU)

       %E     Modifikator: Alternatives (»Ära-basiertes«) Format benutzen, siehe unten. (SU)

       %F     Äquivalent zu %Y-%m-%d (dem ISO-8601-Datumsformat) (C99)

       %G     Das wochenbasierte Jahr (siehe ANMERKUNGEN) nach ISO 8601 mit dem  Jahrhundert  als
              Dezimalzahl.  Das  vierstellige Jahr, das zu der ISO-Wochennummer (siehe %V) passt.
              Es hat dasselbe Format und denselben Wert wie %, wenn aber die ISO-Wochennummer zum
              vorhergehenden  oder  nächsten  Jahr  gehört,  wird stattdessen dieses Jahr benutzt
              (berechnet aus tm_year, tm_yday und tm_wday). (TZ)

       %g     Wie %G aber ohne das Jahrhundert, also mit zweistelligem  Jahr  (00…99)  (berechnet
              aus tm_year, tm_yday und tm_wday). (TZ)

       %h     Äquivalent zu %b (SU)

       %H     Die Stunde im 24h-Format als Ganzzahl (Bereich 00-23) (berechnet aus tm_hour).

       %I     Die Stunde im 12h-Format als Ganzzahl (Bereich 01-12) (berechnet aus tm_hour).

       %j     Der Tag im Jahr als Ganzzahl (Bereich 001-366) (berechnet aus tm_yday).

       %k     Die  Stunde  im  24h-Format als Ganzzahl (Bereich 0-23); einzelne Ziffern haben ein
              vorangestelltes Leerzeichen (siehe auch %H) (berechnet aus tm_hour). (TZ)

       %l     Die Stunde im 12h-Format als Ganzzahl (Bereich 1-12); einzelne  Ziffern  haben  ein
              vorangestelltes Leerzeichen (siehe auch %I) (berechnet aus tm_hour). (TZ)

       %m     Der Monat als Ganzzahl (Bereich 01-12) (berechnet aus tm_mon).

       %M     Die Minute als Ganzzahl (Bereich 00-59) (berechnet aus tm_min).

       %n     Ein Zeilenvorschub. (SU)

       %O     Modifikator: Alternative numerische Symbole benutzen, siehe unten. (SU)

       %p     Entweder  »AM«  oder »PM«, je nach der übergebenen Uhrzeit, oder die entsprechenden
              Zeichenketten in der  momentanen  Locale.  Mittag  erhält  »PM«,  Mitternacht  »AM«
              (berechnet aus tm_hour). (Die in der momentanen Locale für »AM« und »PM« verwandten
              speziellen Zeichenketten können durch  einen  Aufruf  von  nl_langinfo(3)  mit  dem
              Argument AM_STR bzw. PM_STR erhalten werden.)

       %P     Wie   %p,   aber  in  Kleinbuchstaben.  »am«  oder  »pm«  oder  eine  entsprechende
              Zeichenkette in der momentanen Locale (berechnet aus tm_hour). (GNU)

       %r     Die Zeit in der a.m.- oder p.m-Darstellung. (SU)  (Das  in  der  momentanen  Locale
              verwandte  spezielle  Format  kann  durch  einen  Aufruf von nl_langinfo(3) mit dem
              Argument T_FMT_AMPM erhalten werden.) (In der POSIX-Locale ist dies zu %I:%M:%S  %p
              äquivalent.)

       %R     Zeit  in  24h-Notation  (%H:%M). (SU) Für eine Version mit Sekunden siehe %T weiter
              unten.

       %s     Die Zahl der Sekunden seit der Epoche, also seit 1970-01-01 00:00:00 UTC (berechnet
              aus mktime(tm)). (TZ)

       %S     Die Sekunde als Ganzzahl (Bereich 00-60) (Der Bereich geht bis 60, um gelegentliche
              Schaltsekunden zu ermöglichen) (berechnet aus tm_sec).

       %t     Ein Tabulatorzeichen. (SU)

       %T     Zeit in 24h-Notation (%H:%M:%S). (SU)

       %u     Der Tag der Woche als Ganzzahl von 1 bis  7,  mit  Montag  als  1.  Siehe  auch  %w
              (berechnet aus tm_wday). (SU)

       %U     Die Wochennummer des aktuellen Jahres als Ganzzahl von 00 bis 53, beginnend mit dem
              ersten Sonntag als ersten Tag der Woche 01 (berechnet  aus  tm_yday  und  tm_wday).
              Siehe auch %V und %W.

       %V     Die  Wochennummer nach ISO 8601 des laufenden Jahres als Dezimalzahl von 01 bis 53,
              wobei Woche 1 die erste Woche ist, die wenigstens 4  Tage  im  laufenden  Jahr  hat
              (berechnet aus tm_year, tm_yday und tm_wday). Siehe auch %U und %W. (SU)

       %w     Der  Tag  der  Woche  als Dezimalzahl von 0 bis 6, mit Sonntag als 0. Siehe auch %u
              (berechnet aus  tm_wday).

       %W     Die Wochennummer des aktuellen Jahres als Ganzzahl von 00 bis 53, beginnend mit dem
              ersten Montag als ersten Tag der Woche 01 (berechnet aus tm_yday und tm_wday).

       %x     Die für die momentane Locale bevorzugte Datumsdarstellung ohne Uhrzeit. (Das in der
              momentanen  Locale  verwandte  speziellen  Format  kann  durch  einen  Aufruf   von
              nl_langinfo(3) für den Konvertierungskennzeichner %x mit dem Argument D_FMT und für
              den Konvertierungskennzeichner %Ex mit dem Argument ERA_D_FMT erhalten werden.) (In
              der POSIX-Locale ist dies zu %m/%d/%y äquivalent.)

       %X     Die  für die momentane Locale bevorzugte Uhrzeitdarstellung ohne Datum. (Das in der
              momentanen  Locale  verwandte  speziellen  Format  kann  durch  einen  Aufruf   von
              nl_langinfo(3) für den Konvertierungskennzeichner %X mit dem Argument T_FMT und für
              den Konvertierungskennzeichner %EX mit dem Argument ERA_T_FMT erhalten werden.) (In
              der POSIX-Locale ist dies zu %H:%M:%S äquivalent.)

       %y     Das   Jahr  als  Dezimalzahl  ohne  ein  Jahrhundert  (Bereich  00  bis  99).  (Der
              Konvertierungskennzeichner %Ey entspricht dem Jahr seit dem  Anfang  der  Ära,  die
              durch den Konvertierungskennzeichner %EC bezeichnet ist.) (Berechnet aus tm_year.)

       %Y     Das  Jahr  als  Ganzzahl  mit  dem  Jahrhundert (der Konvertierungskennzeichner %EY
              entspricht  der  vollständigen  alternativen  Jahresdarstellung)   (berechnet   aus
              tm_year).

       %z     Die  numerische  Zeitzone  in  der  Form +hhmm oder -hhmm (also die Verschiebung in
              Stunden und Minuten relativ zu UTC). (SU)

       %Z     Der Zeitzonenname oder die Abkürzung.

       %+     Datum und Zeit im Format von date(1). (TZ) (Von Glibc2 nicht unterstützt)

       %%     Das Zeichen »%«.

       Einige Konvertierungskennzeichner  können  durch  vorangestelltes  E  oder  O  modifiziert
       werden,  um  anzufordern,  dass ein alternatives Format benutzt werden soll. Existiert das
       alternative Format in der momentanen Locale nicht, ist das Verhalten so, als ob  es  keine
       Modifikation  gibt.  (SU)  Die  Single Unix Specification erwähnt %Ec, %EC, %Ex, %EX, %Ey,
       %EY, %Od, %Oe, %OH, %OI, %Om, %OM, %OS, %Ou, %OU, %OV, %Ow, %OW, %Oy, wobei der Effekt von
       O  ist,  alternative numerische Symbole zu benutzen (etwa römische Zahlen), und der von E,
       eine von der Locale abhängige alternative Repräsentation zu wählen. Die Regeln, mit  denen
       der Modifikator E die Datumsdarstellung steuert, können durch Bereitstellung des Arguments
       ERA für ein nl_langinfo(3) erhalten werden. Ein Beispiel für eine solche alternative  Form
       ist das japanische Ära-Schema in der Glibc-Locale ja_JP.

       strftime_l()  ist  das  Äquivalent  zu  strftime(),  außer  dass es die festgelegte locale
       anstatt der aktuellen Locale verwendet. Das Verhalten ist nicht  definiert,  falls  locale
       ungültig oder LC_GLOBAL_LOCALE ist.

RÜCKGABEWERT

       Vorausgesetzt,  dass  die  Zeichenkette  einschließlich des abschließenden Nullbytes nicht
       mehr als max Byte ergibt, liefert strftime() die Anzahl der Byte (ohne  das  abschließende
       Nullbyte)  zurück,  die in das Feld s geschrieben wurden. Falls die Länge der Zeichenkette
       (einschließlich des abschließenden Nullbytes) größer als max byte wäre,  gibt  strftime  0
       zurück und der Inhalt des Feldes ist nicht definiert.

       Beachten  Sie,  dass  der Rückgabewert 0 nicht notwendigerweise auf einen Fehler hinweist;
       zum  Beispiel  ergibt  %p  in  vielen  Locales  eine  leere   Zeichenkette.   Eine   leere
       format-Zeichenkette wird ebenso zu einer leeren Zeichenkette führen.

UMGEBUNGSVARIABLEN

       Die Umgebungsvariablen TZ und LC_CTIME werden benutzt.

ATTRIBUTE

       Siehe attributes(7) für eine Erläuterung der in diesem Abschnitt verwandten Ausdrücke.

       ┌──────────────────────────────────────────┬───────────────────────┬──────────────────────┐
       │SchnittstelleAttributWert                 │
       ├──────────────────────────────────────────┼───────────────────────┼──────────────────────┤
       │strftime(), strftime_l()                  │ Multithread-Fähigkeit │ MT-Sicher env locale │
       └──────────────────────────────────────────┴───────────────────────┴──────────────────────┘

STANDARDS

       strftime()
              C11, POSIX.1-2008.

       strftime_l()
              POSIX.1-2008.

GESCHICHTE

       strftime()
              SVr4, C89.

       strftime_l()
              POSIX.1-2008.

       Es  gibt  strikte  Teilmengenbeziehungen  zwischen  den  Konvertierungen aus ANSI C (nicht
       markiert),  jenen  der  Single  Unix  Specification  (markiert  als  SU),  denen  aus  dem
       Timezone-Paket  von Olson (TZ) und denen aus der Glibc (GNU), außer dass %+ in der Glibc 2
       nicht unterstützt wird. Andererseits bietet Glibc 2 einige Erweiterungen. POSIX.1 verweist
       nur  auf  ANSI  C;  POSIX.2  beschreibt  unter  date(1) einige Erweiterungen, die auch auf
       strftime zutreffen können. Die %F-Umwandlung findet sich in C99 und POSIX.1-2001.

       In SUSv2 ließ der Kennzeichner %S einen Bereich von 00  bis  61  zu,  um  die  theoretisch
       mögliche  Minute  mit  zwei  Schaltsekunden  zu  ermöglichen.  (Es  hat nie so eine Minute
       gegeben.)

ANMERKUNGEN

   ISO-8601-Wochendaten
       %G, %g und %V ergeben Werte aus dem wochenbasierten  Jahr,  die  nach  der  Definition  im
       ISO-8601-Standard  berechnet  werden. In diesem System beginnen Wochen an einem Montag und
       werden von 01, der ersten Woche, bis zu 52 oder 53 für die letzte Woche gezählt.  Woche  1
       ist die erste Woche, in der vier oder mehr Tage in das neue Jahr fallen (oder synonym ist:
       Woche 01 ist die erste Woche des Jahres, die einen Donnerstag enthält, oder die Woche, die
       den  4.  Januar  enthält).  Wenn drei oder weniger Tage der ersten Kalenderwoche des neuen
       Jahres in dieses Jahr fallen, dann zählt das wochenbasierte  System  nach  ISO 8601  diese
       Tage  als Teil der Woche 52 oder 53 des Vorjahres. Zum Beispiel ist der 1. Januar 2010 ein
       Freitag, was bedeutet, dass nur drei Tage dieser Kalenderwoche in das Jahr 2010 fallen. So
       betrachtet  das  wochenbasierte System nach ISO 8601 diese Tage als Teil der Woche 53 (%V)
       des Jahres 2009 (%G); Woche 01 des ISO-8601-Jahres 2010 beginnt am Montag, dem  4.  Januar
       2010.  Entsprechend werden die ersten zwei Tage des Januars 2011 als Teil der Woche 52 des
       Jahres 2010 betrachtet.

   Anmerkungen zur Glibc
       Glibc bietet einige  Erweiterungen  für  Konvertierungsanweisungen.  (Diese  Erweiterungen
       werden  nicht  in  POSIX.1-2001  beschrieben,  aber  ein  paar  Systeme  stellen  ähnliche
       Möglichkeiten bereit). Zwischen dem Zeichen »%« und  dem  Umwandlungskennzeichnungszeichen
       können  ein  optionaler  Schalter  und  ein  Feld Weite angegeben werden. (Diese gehen den
       Modifikatoren E oder O voraus, wenn vorhanden.)

       Die folgenden Zeichen dürfen als Schalter genutzt werden:

       _      (Unterstrich) füllt eine numerische Ergebniszeichenkette mit Leerzeichen auf.

       -      (Strich) füllt eine numerische Ergebniszeichenkette nicht mit Leerzeichen auf.

       0      Füllt  eine  numerische  Ergebniszeichenkette  mit  Nullen  auf,  sogar  wenn   der
              Konvertierungskennzeichner standardmäßig die Auffüllung mit Leerzeichen vorgibt.

       ^      wandelt alphanumerische Zeichen in der Ergebniszeichenkette in Großbuchstaben um.

       #      wechselt  in  der  Ergebniszeichenkette Groß- und Kleinschreibung. (Dieser Schalter
              arbeitet nur mit bestimmten Konvertierungskennzeichnern und  davon  ergibt  nur  %Z
              wirklich Sinn.)

       Ein  optionaler dezimaler Breitenkennzeichner kann dem (möglicherweise fehlenden) Schalter
       folgen. Falls die natürliche Größe des Feldes kleiner als diese Weite ist, dann  wird  die
       Ergebniszeichenkette (links) bis zur angegebenen Weite aufgefüllt.

FEHLER

       Wenn  die  Länge  der  ausgegebenen  Zeichenkette  max  Bytes übersteigt, wird errno nicht
       gesetzt. Das macht es unmöglich, diesen Fehler von anderen Fällen zu unterscheiden, wo die
       format-Zeichenkette   regulär   eine   Ausgabezeichenkette   der  Länge  Null  produziert.
       POSIX.1-2001 gibt keine errno-Einstellungen für strftime() an.

       Ein paar fehlerhafte Versionen von gcc(1) beschweren sich  über  die  Verwendung  von  %c:
       warning:  `%c'  yields  only  last  2  digits  of  year  in some locales. Natürlich werden
       Programmierer zur Verwendung von %c ermutigt, weil es die bevorzugte Darstellung von Datum
       und  Uhrzeit  bewirkt.  Man  trifft  bei  der  Umgehung  dieses  gcc(1)-Problemes auf alle
       möglichen  seltsamen  Effekte.  Ein  relativ  sauberer  Umweg  ist  das  Hinzufügen  einer
       Zwischenfunktion.

           size_t
           my_strftime(char *s, size_t max, const char *fmt,
                       const struct tm *tm)
           {
               return strftime(s, max, fmt, tm);
           }

       Heutzutage   stellt   gcc(1)   die  Option  -Wno-format-y2k  bereit,  um  die  Warnung  zu
       unterdrücken. Damit ist die eben erwähnte Hilfskonstruktion nicht mehr erforderlich.

BEISPIELE

       Zu RFC 2822 konformes Datumsformat (mit einer englischen Locale für %a und %b)

           "%a, %d %b %Y %T %z"

       Zu RFC 822 konformes Datumsformat (mit einer englischen Locale für %a und %b)

           "%a, %d %b %y %T %z"

   Beispielprogramm
       Das folgende Programm kann zum Experimentieren mit strftime() verwendet werden.

       Einige  Beispiele  der   von   der   Glibc-Implementierung   von   strftime()   erstellten
       Ergebniszeichenkette sind wie folgt:

           $ ./a.out '%m'
           Ergebniszeichenkette ist "11"
           $ ./a.out '%5m'
           Ergebniszeichenkette ist "00011"
           $ ./a.out '%_5m'
           Ergebniszeichenkette ist "   11"

   Programmquelltext

       #include <stdio.h>
       #include <stdlib.h>
       #include <time.h>

       int
       main(int argc, char *argv[])
       {
           char outstr[200];
           time_t t;
           struct tm *tmp;

           t = time(NULL);
           tmp = localtime(&t);
           if (tmp == NULL) {
               perror("localtime");
               exit(EXIT_FAILURE);
           }

           if (strftime(outstr, sizeof(outstr), argv[1], tmp) == 0) {
               fprintf(stderr, "strftime lieferte 0 zurück");
               exit(EXIT_FAILURE);
           }

           printf("Ergebniszeichenkette ist \"%s\"\n", outstr);
           exit(EXIT_SUCCESS);
       }

SIEHE AUCH

       date(1), time(2), ctime(3), nl_langinfo(3), setlocale(3), sprintf(3), strptime(3)

ÜBERSETZUNG

       Die    deutsche    Übersetzung   dieser   Handbuchseite   wurde   von   Helge   Kreutzmann
       <debian@helgefjell.de>,  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⟩.