Namespaces
Variants

strftime

Von de.cppreference.net
< c | chrono
Definiert im 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)

Konvertiert die Datums- und Zeitinformationen aus einer gegebenen Kalenderzeit tp in eine nullterminierte Multibyte-Zeichenkette str gemäß Formatstring format. Es werden bis zu count Bytes geschrieben.

Parameter

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

-Objekt, das die zu formatierende Zeit angibt

Formatstring%Der Formatstring besteht aus null oder mehr Konvertierungsspezifizierern und gewöhnlichen Zeichen (außer %). Alle gewöhnlichen Zeichen, einschließlich des terminierenden Nullzeichens, werden ohne Änderung in die Ausgabezeichenkette kopiert. Jede Konvertierungsspezifikation beginnt mit einem E-Zeichen, optional gefolgt von einem O- oder

-Modifikator (ignoriert, falls vom Gebietsschema nicht unterstützt), gefolgt von dem Zeichen, das das Verhalten des Spezifizierers bestimmt. Die folgenden Formatspezifizierer sind verfügbar:
Konvertierungs
spezifizierer Erklärung
% Verwendete Felder %schreibt literales %%. Die vollständige Konvertierungsspezifikation muss
n
sein.
(C99)
t
schreibt Zeilenumbruchzeichen
(C99)
schreibt horizontales Tabulatorzeichen
Y Jahr schreibt Jahr tm_year
EY
als Dezimalzahl, z.B. 2017
(C99)schreibt Jahr tm_year
y in der alternativen Darstellung, z.B. 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Gebietsschema schreibt die letzten 2 Ziffern von Jahr[00,99] als Dezimalzahl (Bereich tm_year
Oy
)
(C99)schreibt die letzten 2 Ziffern von Jahr tm_year
Ey
im alternativen Zahlensystem, z.B. 十一 statt 11 im ja_JP-Gebietsschema
(C99)schreibt Jahr%EC als Offset von der alternativen Kalenderperiode des Gebietsschemas tm_year
C
(gebietsschemaabhängig)
(C99)schreibt die ersten 2 Ziffern von Jahr[00,99] als Dezimalzahl (Bereich tm_year
EC
)
(C99)schreibt den Namen des Basisjahres (Periode) tm_year
G
in der alternativen Darstellung des Gebietsschemas, z.B. 平成 (Heisei-Ära) im ja_JP
(C99)schreibt das ISO-8601-Wochen-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 die folgenden Anforderungen erfüllen:
  • Enthält den 4. Januar
tm_yearEnthält den ersten Donnerstag des Jahrestm_wday, tm_yday
g
,
(C99)schreibt die letzten 2 Ziffern des ISO-8601-Wochen-jahres[00,99], d.h. des Jahres, das die angegebene Woche enthält (Bereich

).

  • In ISO 8601 beginnen Wochen mit Montag und die erste Woche des Jahres muss die folgenden Anforderungen erfüllen:
  • Enthält den 4. Januar
tm_yearEnthält den ersten Donnerstag des Jahrestm_wday, tm_yday
Monat
b schreibt den abgekürzten Monatsnamen, z.B. Oct (gebietsschemaabhängig) tm_mon
Ob
(C23)
schreibt den abgekürzten Monatsnamen in der alternativen Darstellung des Gebietsschemas tm_mon
h
(C99)
Synonym von b tm_mon
B schreibt den vollständigen Monatsnamen, z.B. October (gebietsschemaabhängig) tm_mon
OB
(C23)
schreibt den entsprechenden vollständigen Monatsnamen in der alternativen Darstellung des Gebietsschemas tm_mon
m schreibt Monat als Dezimalzahl (Bereich [01,12]) tm_mon
Om
(C99)
schreibt Monat im alternativen Zahlensystem, z.B. 十二 statt 12 im ja_JP-Gebietsschema tm_mon
Woche
U schreibt die Woche des Jahres als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich [00,53]) tm_year, tm_wday, tm_yday
OU
(C99)
schreibt die Woche des Jahres, wie durch %U, im alternativen Zahlensystem, z.B. 五十二 statt 52 im ja_JP-Gebietsschema tm_year, tm_wday, tm_yday
W schreibt die Woche des Jahres als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich [00,53]) tm_year, tm_wday, tm_yday
OW
(C99)
schreibt die Woche des Jahres, wie durch %W, im alternativen Zahlensystem, z.B. 五十二 statt 52 im ja_JP-Gebietsschema 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 die folgenden 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 Woche des Jahres, wie durch %V, im alternativen Zahlensystem, z.B. 五十二 statt 52 im ja_JP-Gebietsschema 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 im alternativen Zahlensystem, z.B. 二十七 statt 27 im ja_JP-Gebietsschema

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

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

Einer einstelligen Zahl wird ein Leerzeichen vorangestellt.

tm_mday
Oe
(C99)
schreibt den einsbasierten Tag des Monats im alternativen Zahlensystem, z.B. 二十七 statt 27 im ja_JP-Gebietsschema

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

tm_mday
Wochentag
a schreibt den abgekürzten Wochentagsnamen, z.B. Fri (gebietsschemaabhängig) tm_wday
A schreibt den vollständigen Wochentagsnamen, z.B. Friday (gebietsschemaabhä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, im alternativen Zahlensystem, z.B. 二 statt 2 im ja_JP-Gebietsschema 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 1 ist, im alternativen Zahlensystem, z.B. 二 statt 2 im ja_JP-Gebietsschema tm_wday
Stunde, Minute, Sekunde
H schreibt die Stunde als Dezimalzahl, 24-Stunden-Zählung (Bereich [00-23]) tm_hour
OH
(C99)
schreibt die Stunde der 24-Stunden-Zählung im alternativen Zahlensystem, z.B. 十八 statt 18 im ja_JP-Gebietsschema tm_hour
I schreibt die Stunde als Dezimalzahl, 12-Stunden-Zählung (Bereich [01,12]) tm_hour
OI
(C99)
schreibt die Stunde der 12-Stunden-Zählung im alternativen Zahlensystem, z.B. 六 statt 06 im ja_JP-Gebietsschema tm_hour
M schreibt die Minute als Dezimalzahl (Bereich [00,59]) tm_min
OM
(C99)
schreibt die Minute im alternativen Zahlensystem, z.B. 二十五 statt 25 im ja_JP-Gebietsschema tm_min
S schreibt die Sekunde als Dezimalzahl (Bereich [00,60]) tm_sec
OS
(C99)
schreibt die Sekunde im alternativen Zahlensystem, z.B. 二十四 statt 24 im ja_JP-Gebietsschema tm_sec
Andere
c schreibt die Standard-Datums- und Zeitzeichenkette, z.B. Sun Oct 17 04:41:13 2010 (gebietsschemaabhängig) alle
Ec
(C99)
schreibt die alternative Datums- und Zeitzeichenkette, z.B. unter Verwendung von 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Gebietsschema alle
x schreibt die lokalisierte Datumsdarstellung (gebietsschemaabhängig) alle
Ex
(C99)
schreibt die alternative Datumsdarstellung, z.B. unter Verwendung von 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Gebietsschema alle
X schreibt die lokalisierte Zeitdarstellung, z.B. 18:40:20 oder 6:40:20 nachm. (gebietsschemaabhängig) alle
EX
(C99)
schreibt die alternative Zeitdarstellung (gebietsschemaabhängig) alle
D
(C99)
äquivalent zu "%m/%d/%y" tm_mon, tm_mday, tm_year
F
(C99)
äquivalent zu "%Y-%m-%d" (dem ISO-8601-Datumsformat) tm_mon, tm_mday, tm_year
r
(C99)
schreibt die lokalisierte 12-Stunden-Zeit (gebietsschemaabhängig) tm_hour, tm_min, tm_sec
R
(C99)
äquivalent zu "%H:%M" tm_hour, tm_min
T
(C99)
äquivalent zu "%H:%M:%S" (dem ISO-8601-Zeitformat) tm_hour, tm_min, tm_sec
p schreibt die lokalisierte Vormittag- oder Nachmittag-Bezeichnung (gebietsschemaabhängig) tm_hour
z
(C99)
schreibt die Abweichung von UTC 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 Bytes, die in das durch str bezeichnete Zeichenarray geschrieben wurden, ohne das terminierende '\0' bei Erfolg. Wenn count erreicht wurde, bevor die gesamte Zeichenkette 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, // = year 2012
        .tm_mon = 9,    // = 10th month
        .tm_mday = 9,   // = 9th day
        .tm_hour = 8,   // = 8 hours
        .tm_min = 10,   // = 10 minutes
        .tm_sec = 20    // = 20 secs
    };

    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

(veraltet in C23)(C11)
konvertiert ein tm-Objekt in eine textuelle Darstellung
(Funktion)
(veraltet in C23)(C11)
konvertiert ein time_t-Objekt in eine textuelle Darstellung
(Funktion)
konvertiert ein tm-Objekt in eine benutzerdefinierte Breitzeichen-Textdarstellung
(Funktion)
C++-Dokumentation für strftime