Provided by: manpages-de-dev_2.5-1_all bug

BEZEICHNUNG

       strftime - formatiert Datum und Uhrzeit

ÜBERSICHT

       #include <time.h>

       size_t strftime(char *s, size_t max, const char *format,
                       const struct tm *tm);

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 Konvertierungsanweisungen) enthalten, von denen jede  mit  einem
       '%'-Zeichen  beginnt  und  mit  einem  Zeichen  endet,  welches  die Art der Konvertierung
       beschreibt (conversion specifier character).  Alle  weiteren  Zeichenfolgen  sind  normale
       Zeichenfolgen.

       Die Zeichen einfacher Zeichenfolgen (einschließlich des Null-Bytes) 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 abhängig von der  momentanen  Locale  (berechnet
              aus tm_wday).

       %A     Der  vollständige Name des Wochentags abhängig von der momentanen Locale (berechnet
              aus tm_wday).

       %b     Der abgekürzte  Monatsname  abhängig  von  der  momentanen  Locale  (berechnet  aus
              tm_mon).

       %B     Der  vollständige  Monatsname  abhängig  von  der  momentanen Locale (berechnet aus
              tm_mon).

       %c     Das bevorzugte Datums- und Uhrzeit-Repräsentation laut Einstellungen der momentanen
              Locale.

       %C     Das Jahrhundert als zweistellige Zahl (Jahr/100) (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 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: Alternatives Format 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).

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

       %r     Zeit in AM/PM-Notation; in der POSIX-Locale ist das äquivalent zu %I:%M:%S %p. (SU)

       %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 bevorzugte Datumsrepräsentation ohne die Zeit in der momentanen Locale.

       %X     Die bevorzugte Uhrzeitrepräsentation ohne das Datum in der momentanen Locale.

       %y     Das Jahr  als  Ganzzahl  ohne  das  Jahrhundert  (Bereich  00-99)  (berechnete  aus
              tm_year).

       %Y     Das Jahr als Ganzzahl mit dem Jahrhundert (berechnet aus tm_year).

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

       %Z     Der Zeitzonename oder die Abkürzung.

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

       %%     Das Zeichen »%«.

       Einige Konvertierungsanweisungen 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.

RÜCKGABEWERT

       Vorausgesetzt, dass die Zeichenkette einschließlich des abschließenden NULL-Zeichens nicht
       mehr  als  max Byte ergibt, liefert strftime() die Anzahl der Byte (ohne das abschließende
       NULL-Zeichen) zurück,  die  in  das  Feld  s  geschrieben  wurden.  Falls  die  Länge  der
       Zeichenkette  (einschließlich  des abschließenden NULL-Zeichens) 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()    │ Multithread-Fähigkeit │ MT-Safe env locale │
       └──────────────┴───────────────────────┴────────────────────┘

KONFORM ZU

       SVr4, C89, C99. 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ß  %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 Woche 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 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.

   Anmerkungen zur Glibc
       Glibc  bietet  einige  Erweiterungen  für  Konvertierungsanweisungen. (Diese Erweiterungen
       werden  nicht  POSIX.1-2001  beschrieben,  aber  ein   paar   Systeme   stellen   ähnliche
       Möglichkeiten  bereit).  Zwischen  dem  '%'-Zeichen  und  dem  Zeichen  zur Festlegung der
       Umwandlung, 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  das
              Konvertierungszeichen 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  Konvertierungsanweisungen  und  davon ergibt nur %Z
              wirklich Sinn.)

       Eine optionale Dezimalzahl zur Angabe folgt dem (möglicherweise fehlenden) Schalter. Falls
       die   natürliche   Größe   des   Feldes  kleiner  ist  als  diese  Weite,  dann  wird  die
       Ergebnis-Zeichenkette (links) bis zur angegebenen Weite aufgefüllt.

FEHLER

       Wenn die Länge des 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.

BEISPIEL

       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 <time.h>
       #include <stdio.h>
       #include <stdlib.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");
               exit(EXIT_FAILURE);
           }

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

SIEHE AUCH

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

KOLOPHON

       Diese Seite  ist  Teil  der  Veröffentlichung  4.15  des  Projekts  Linux-man-pages.  Eine
       Beschreibung  des  Projekts,  Informationen,  wie  Fehler gemeldet werden können sowie die
       aktuelle Version dieser Seite finden sich unter https://www.kernel.org/doc/man-pages/.

Ü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  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 <debian-l10n-german@lists.debian.org>.