Provided by: manpages-de-dev_1.11-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 Zeit tm entsprechend der Formatbeschreibung format
       und schreibt das Ergebnis in das Feld s der Größe max.

       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 folgt ersetzt:

       %a     Der abgekürzte Name des Wochentags abhängig von der momentanen Locale.

       %A     Der vollständige Name des Wochentags abhängig von der momentanen Locale.

       %b     Der abgekürzte Monatsname abhängig von der momentanen Locale.

       %B     Der vollständige Monatsname abhängig von der momentanen Locale.

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

       %C     Das Jahrhundert als zweistellige Zahl (Jahr/100). (SU)

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

       %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. (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.(TZ)

       %g     Wie %G aber ohne das Jahrhundert, also mit zweistelligem Jahr (00-99). (TZ)

       %h     Äquivalent zu %b (SU)

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

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

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

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

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

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

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

       %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«.

       %P     Wie   %p,   aber  in  Kleinbuchstaben.  »am«  oder  »pm«  oder  eine  entsprechende
              Zeichenkette in der momentanen Locale. (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. (TZ)

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

       %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. (SU)

       %U     Die Wochennummer des aktuellen Jahres als Ganzzahl von 00 bis 53, beginnend mit dem
              ersten Sonntag als ersten Tag der Woche 01. 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.
              Siehe auch %U und %W. (SU)

       %w     Der Tag der Woche als Dezimalzahl von 0 bis 6, mit Sonntag als 0. Siehe auch %u.

       %W     Die  Wochennummer des aktuellen Jahres als Dezimalzahl von 00 bis 53, beginnend mit
              dem ersten Montag als ersten Tag der ersten Woche.

       %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).

       %Y     Das Jahr als Ganzzahl mit dem Jahrhundert.

       %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.

       Die Zeit-Struktur tm wird in <time.h> definiert (siehe auch ctime(3)).

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.04  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 http://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>.