Namespaces
Variants

strftime

From cppreference.net
Definiert in Header <time.h>
size_t strftime ( char * str, size_t count,
const char * format, const struct tm * tp ) ;
(bis C99)
size_t strftime ( char * restrict str, size_t count,
const char * restrict format, const struct tm * restrict tp ) ;
(seit C99)

Wandelt die Datums- und Zeitinformationen aus einer gegebenen Kalenderzeit tp in eine nullterminierte Multibyte-Zeichenkette str gemäß der Formatzeichenkette format um. Bis zu count Bytes werden geschrieben.

Inhaltsverzeichnis

Parameter

str - Zeiger auf das erste Element des char -Arrays für die Ausgabe
count - maximale Anzahl der zu schreibenden Bytes
format - Zeiger auf eine nullterminierte Multibyte-Zeichenkette, die das Format der Konvertierung festlegt
tp - Zeiger auf ein struct tm -Objekt, das die zu formatierende Zeit angibt

Formatzeichenkette

Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern und gewöhnlichen Zeichen (außer % ). Alle gewöhnlichen Zeichen, einschließlich des abschließenden Nullzeichens, werden unverändert in die Ausgabezeichenfolge kopiert. Jede Konvertierungsspezifikation beginnt mit dem % -Zeichen, optional gefolgt von einem E - oder O -Modifikator (wird ignoriert, wenn von der Locale nicht unterstützt), gefolgt von dem Zeichen, das das Verhalten der Spezifizierung bestimmt. Die folgenden Formatspezifizierer sind verfügbar:

Konvertierungsspezifizierer
Erklärung Verwendete Felder
% schreibt das Zeichen % . Die vollständige Konvertierungsspezifikation muss %% lauten.
n
(C99)
schreibt Newline-Zeichen
t
(C99)
schreibt horizontales Tabulatorzeichen
Jahr
Y schreibt das Jahr als Dezimalzahl, z.B. 2017 tm_year
EY
(C99)
schreibt das Jahr in alternativer Darstellung, z.B. 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Locale tm_year
y schreibt die letzten 2 Ziffern des Jahres als Dezimalzahl (Bereich [00,99] ) tm_year
Oy
(C99)
schreibt die letzten 2 Ziffern des Jahres unter Verwendung des alternativen Zahlensystems, z.B. 十一 statt 11 im ja_JP-Locale tm_year
Ey
(C99)
schreibt das Jahr als Offset vom alternativen Kalenderzeitraum des Gebietsschemas %EC (gebietsschemaabhängig) tm_year
C
(C99)
schreibt die ersten 2 Ziffern des Jahres als Dezimalzahl (Bereich [00,99] ) tm_year
EC
(C99)
schreibt den Namen des Basisjahres (Zeitraums) in der alternativen Darstellung des Gebietsschemas, z.B. 平成 (Heisei-Ära) in ja_JP tm_year
G
(C99)
schreibt das ISO 8601 wochenbasierte Jahr , d.h. das Jahr, das die angegebene Woche enthält.

In ISO 8601 beginnen Wochen mit Montag und die erste Woche des Jahres muss folgende Anforderungen erfüllen:

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
tm_year , tm_wday , tm_yday
g
(C99)
schreibt die letzten 2 Ziffern des ISO 8601 wochenbasierten Jahres , d.h. des Jahres, das die angegebene Woche enthält (Bereich [00,99] ).

In ISO 8601 beginnen Wochen mit Montag und die erste Woche des Jahres muss folgende Anforderungen erfüllen:

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
tm_year , tm_wday , tm_yday
Monat
b schreibt abgekürzten Monatsnamen , z.B. Oct (lokalisierungsabhängig) tm_mon
Ob
(C23)
schreibt den abgekürzten Monatsnamen in der alternativen Darstellung des Gebietsschemas tm_mon
h
(C99)
Synonym für b tm_mon
B schreibt den vollständigen Monatsnamen , z.B. October (lokalisierungsabhängig) tm_mon
OB
(C23)
schreibt den entsprechenden vollständigen Monatsnamen in der alternativen Darstellung des Gebietsschemas tm_mon
m schreibt den Monat als Dezimalzahl (Bereich [01,12] ) tm_mon
Om
(C99)
schreibt den Monat unter Verwendung des alternativen Zahlensystems, z.B. 十二 statt 12 im ja_JP-Locale tm_mon
Woche
U schreibt die Kalenderwoche als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich [00,53] ) tm_year , tm_wday , tm_yday
OU
(C99)
schreibt die Kalenderwoche , wie durch %U , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
W schreibt die Kalenderwoche des Jahres als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich [00,53] ) tm_year , tm_wday , tm_yday
OW
(C99)
schreibt die Kalenderwoche , wie durch %W , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
V
(C99)
schreibt die ISO 8601-Woche des Jahres (Bereich [01,53] ).

In ISO 8601 beginnen Wochen mit Montag und die erste Woche des Jahres muss folgende Anforderungen erfüllen:

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
tm_year , tm_wday , tm_yday
OV
(C99)
schreibt die Kalenderwoche , wie durch %V , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
Tag des Jahres/Monats
j schreibt den Tag des Jahres als Dezimalzahl (Bereich [001,366] ) tm_yday
d schreibt den Tag des Monats als Dezimalzahl (Bereich [01,31] ) tm_mday
Od
(C99)
schreibt den nullbasierten Tag des Monats unter Verwendung des alternativen Zahlensystems, z.B. 二十七 statt 27 im ja_JP-Locale

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

tm_mday
e
(C99)
schreibt den Tag des Monats als Dezimalzahl (Bereich [1,31] ).

Einzelne Ziffern werden durch ein Leerzeichen ergänzt.

tm_mday
Oe
(C99)
Schreibt den Tag des Monats in 1-basierter Zählung unter Verwendung des alternativen Zahlensystems, z.B. 二十七 statt 27 im ja_JP-Locale

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

tm_mday
Wochentag
a schreibt den abgekürzten Wochentagsnamen , z.B. Fri (lokalabhängig) tm_wday
A schreibt den vollständigen Wochentagsnamen , z.B. Friday (lokalisierungsabhängig) tm_wday
w schreibt den Wochentag als Dezimalzahl, wobei Sonntag 0 ist (Bereich [0-6] ) tm_wday
Ow
(C99)
schreibt den Wochentag , wobei Sonntag 0 ist, unter Verwendung des alternativen Zahlensystems, z.B. 二 statt 2 im ja_JP-Locale tm_wday
u
(C99)
schreibt den Wochentag als Dezimalzahl, wobei Montag 1 ist (ISO 8601 Format) (Bereich [1-7] ) tm_wday
Ou
(C99)
schreibt den Wochentag , wobei Montag als 1 gilt, unter Verwendung des alternativen Zahlensystems, z.B. 二 statt 2 im ja_JP-Locale tm_wday
Stunde, Minute, Sekunde
H schreibt die Stunde als Dezimalzahl, 24-Stunden-Format (Bereich [00-23] ) tm_hour
OH
(C99)
schreibt die Stunde im 24-Stunden-Format unter Verwendung des alternativen Zahlensystems, z.B. 十八 statt 18 im ja_JP-Locale tm_hour
I schreibt hour als Dezimalzahl, 12-Stunden-Zeitformat (Bereich [01,12] ) tm_hour
OI
(C99)
schreibt Stunde aus dem 12-Stunden-Format unter Verwendung des alternativen Zahlensystems, z.B. 六 statt 06 im ja_JP-Locale tm_hour
M schreibt die Minute als Dezimalzahl (Bereich [00,59] ) tm_min
OM
(C99)
schreibt Minute unter Verwendung des alternativen Zahlensystems, z.B. 二十五 statt 25 im ja_JP-Locale tm_min
S schreibt die Sekunde als Dezimalzahl (Bereich [00,60] ) tm_sec
OS
(C99)
schreibt Sekunde unter Verwendung des alternativen Zahlensystems, z.B. 二十四 statt 24 im ja_JP-Locale tm_sec
Sonstiges
c schreibt Standard-Datum- und Zeitzeichenkette , z.B. Sun Oct 17 04:41:13 2010 (lokalabhängig) alle
Ec
(C99)
schreibt alternative Datums- und Zeitzeichenkette , z.B. Verwendung von 平成23年 (Jahr Heisei 23) anstelle von 2011年 (Jahr 2011) im ja_JP-Locale alle
x schreibt lokalisierte Datumsdarstellung (lokalabhängig) alle
Ex
(C99)
schreibt alternative Datumsdarstellung , z.B. Verwendung von 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Locale alle
X schreibt lokalisierte Zeitdarstellung , z.B. 18:40:20 oder 6:40:20 PM (lokalabhängig) alle
EX
(C99)
schreibt alternative Zeitdarstellung (lokalisierungsabhängig) alle
D
(C99)
entspricht "%m/%d/%y" tm_mon , tm_mday , tm_year
F
(C99)
entspricht "%Y-%m-%d" (dem ISO 8601 Datumsformat) tm_mon , tm_mday , tm_year
r
(C99)
schreibt lokalisierte 12-Stunden-Uhrzeit (lokalabhängig) tm_hour , tm_min , tm_sec
R
(C99)
entspricht "%H:%M" tm_hour , tm_min
T
(C99)
entspricht "%H:%M:%S" (dem ISO 8601 Zeitformat) tm_hour , tm_min , tm_sec
p schreibt lokalisiertes a.m. oder p.m. (lokalabhängig) tm_hour
z
(C99)
schreibt den UTC-Offset im ISO 8601-Format (z.B. -0430 ) oder keine Zeichen, wenn die Zeitzoneninformation nicht verfügbar ist tm_isdst
Z schreibt den gebietsschemaabhängigen Zeitzonennamen oder die Abkürzung , oder keine Zeichen, wenn die Zeitzoneninformation nicht verfügbar ist tm_isdst

Rückgabewert

Die Anzahl der in das Zeichenarray geschriebenen Bytes, auf das str zeigt, ohne das abschließende ' \0 ' bei Erfolg. Wenn count erreicht wurde, bevor der gesamte String gespeichert werden konnte, wird 0 zurückgegeben und der Inhalt ist unbestimmt.

Beispiel

#include <locale.h>
#include <stdio.h>
#include <time.h>
int main(void)
{
    char buff[70];
    struct tm my_time = { .tm_year = 112, // = Jahr 2012
                          .tm_mon = 9,    // = 10. Monat
                          .tm_mday = 9,   // = 9. Tag
                          .tm_hour = 8,   // = 8 Stunden
                          .tm_min = 10,   // = 10 Minuten
                          .tm_sec = 20    // = 20 Sekunden
    };
    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");
    setlocale(LC_TIME, "el_GR.utf8");
    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");
}

Mögliche Ausgabe:

Sunday Sun Oct  9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST

Referenzen

  • C23-Standard (ISO/IEC 9899:2024):
  • 7.27.3.5 Die strftime-Funktion (S: TBD)
  • C17-Standard (ISO/IEC 9899:2018):
  • 7.27.3.5 Die strftime-Funktion (S: 288-291)
  • C11-Standard (ISO/IEC 9899:2011):
  • 7.27.3.5 Die strftime-Funktion (S: 394-397)
  • C99-Standard (ISO/IEC 9899:1999):
  • 7.23.3.5 Die strftime-Funktion (S: 343-347)
  • C89/C90 Standard (ISO/IEC 9899:1990):
  • 4.12.3.5 Die strftime-Funktion

Siehe auch

(deprecated in C23) (C11)
wandelt ein tm -Objekt in eine Textdarstellung um
(Funktion)
(deprecated in C23) (C11)
wandelt ein time_t -Objekt in eine Textdarstellung um
(Funktion)
wandelt ein tm -Objekt in eine benutzerdefinierte breitzeichen-Textdarstellung um
(Funktion)
C++-Dokumentation für strftime