plucky (3) strftime.3.gz

Provided by: manpages-de-dev_4.25.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⟩.