focal (3) strftime.3.gz

Provided by: manpages-de-dev_2.16-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 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 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  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.

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

       Eine  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 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  5.03  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>.