Namespaces
Variants

strftime

De fr.cppreference.net
< c | chrono
Défini dans l'en-tête <time.h>
size_t strftime( char* str, size_t count,
                 const char* format, const struct tm* tp );
(jusqu'à C99)
size_t strftime( char* restrict str, size_t count,
                 const char* restrict format, const struct tm* restrict tp );
(depuis C99)

Convertit les informations de date et d'heure à partir d'un temps calendaire donné tp en une chaîne de caractères multi-octets terminée par un caractère nul str selon la chaîne de format format. Jusqu'à count octets sont écrits.

Paramètres

str - pointeur vers le premier élément du tableau char pour la sortie
count - nombre maximum d'octets à écrire
format - pointeur vers une chaîne de caractères multi-octets terminée par un caractère nul spécifiant le format de conversion
tp - pointeur vers un objet struct tm spécifiant l'heure à formater

Chaîne de format

La chaîne de format se compose de zéro ou plusieurs spécificateurs de conversion et de caractères ordinaires (sauf %). Tous les caractères ordinaires, y compris le caractère nul de terminaison, sont copiés dans la chaîne de sortie sans modification. Chaque spécification de conversion commence par le caractère %, facultativement suivi d'un modificateur E ou O (ignoré s'il n'est pas supporté par la locale), suivi du caractère qui détermine le comportement du spécificateur. Les spécificateurs de format suivants sont disponibles :

Conversion
spécificateur
Explication Champs utilisés
% écrit le littéral %. La spécification de conversion complète doit être %%.
n
(C99)
écrit le caractère de nouvelle ligne
t
(C99)
écrit le caractère de tabulation horizontale
Année
Y écrit l'année sous forme de nombre décimal, p.ex. 2017 tm_year
EY
(C99)
écrit l'année dans la représentation alternative, p.ex. 平成23年 (année Heisei 23) au lieu de 2011年 (année 2011) dans la locale ja_JP tm_year
y écrit les 2 derniers chiffres de l'année sous forme de nombre décimal (intervalle [00,99]) tm_year
Oy
(C99)
écrit les 2 derniers chiffres de l'année en utilisant le système numérique alternatif, p.ex. 十一 au lieu de 11 dans la locale ja_JP tm_year
Ey
(C99)
écrit l'année comme décalage par rapport à la période calendaire alternative de la locale %EC (dépendant de la locale) tm_year
C
(C99)
écrit les 2 premiers chiffres de l'année sous forme de nombre décimal (intervalle [00,99]) tm_year
EC
(C99)
écrit le nom de l'année de base (période) dans la représentation alternative de la locale, p.ex. 平成 (ère Heisei) dans ja_JP tm_year
G
(C99)
écrit l'année basée sur la semaine ISO 8601, c'est-à-dire l'année qui contient la semaine spécifiée.

Dans la norme ISO 8601, les semaines commencent le lundi et la première semaine de l'année doit satisfaire aux exigences suivantes :

  • Inclut le 4 janvier
  • Inclut le premier jeudi de l'année
tm_year, tm_wday, tm_yday
g
(C99)
écrit les 2 derniers chiffres de l'année basée sur la semaine ISO 8601, c'est-à-dire l'année qui contient la semaine spécifiée (intervalle [00,99]).

Dans la norme ISO 8601, les semaines commencent le lundi et la première semaine de l'année doit satisfaire aux exigences suivantes :

  • Inclut le 4 janvier
  • Inclut le premier jeudi de l'année
tm_year, tm_wday, tm_yday
Mois
b écrit le nom du mois abrégé, p.ex. Oct (dépendant de la locale) tm_mon
Ob
(C23)
écrit le nom du mois abrégé dans la représentation alternative de la locale tm_mon
h
(C99)
synonyme de b tm_mon
B écrit le nom du mois complet, p.ex. October (dépendant de la locale) tm_mon
OB
(C23)
écrit le nom du mois complet approprié dans la représentation alternative de la locale tm_mon
m écrit le mois sous forme de nombre décimal (intervalle [01,12]) tm_mon
Om
(C99)
écrit le mois en utilisant le système numérique alternatif, p.ex. 十二 au lieu de 12 dans la locale ja_JP tm_mon
Semaine
U écrit la semaine de l'année sous forme de nombre décimal (dimanche est le premier jour de la semaine) (intervalle [00,53]) tm_year, tm_wday, tm_yday
OU
(C99)
écrit la semaine de l'année, comme par %U, en utilisant le système numérique alternatif, p.ex. 五十二 au lieu de 52 dans la locale ja_JP tm_year, tm_wday, tm_yday
W écrit la semaine de l'année sous forme de nombre décimal (lundi est le premier jour de la semaine) (intervalle [00,53]) tm_year, tm_wday, tm_yday
OW
(C99)
écrit la semaine de l'année, comme par %W, en utilisant le système numérique alternatif, p.ex. 五十二 au lieu de 52 dans la locale ja_JP tm_year, tm_wday, tm_yday
V
(C99)
écrit la semaine ISO 8601 de l'année (intervalle [01,53]).

Dans la norme ISO 8601, les semaines commencent le lundi et la première semaine de l'année doit satisfaire aux exigences suivantes :

  • Inclut le 4 janvier
  • Inclut le premier jeudi de l'année
tm_year, tm_wday, tm_yday
OV
(C99)
écrit la semaine de l'année, comme par %V, en utilisant le système numérique alternatif, p.ex. 五十二 au lieu de 52 dans la locale ja_JP tm_year, tm_wday, tm_yday
Jour de l'année/mois
j écrit le jour de l'année sous forme de nombre décimal (intervalle [001,366]) tm_yday
d écrit le jour du mois sous forme de nombre décimal (intervalle [01,31]) tm_mday
Od
(C99)
écrit le jour du mois basé sur zéro en utilisant le système numérique alternatif, p.ex. 二十七 au lieu de 27 dans la locale ja_JP

Un caractère unique est précédé d'un espace.

tm_mday
e
(C99)
écrit le jour du mois sous forme de nombre décimal (intervalle [1,31]).

Un chiffre unique est précédé d'un espace.

tm_mday
Oe
(C99)
écrit le jour du mois basé sur un en utilisant le système numérique alternatif, p.ex. 二十七 au lieu de 27 dans la locale ja_JP

Un caractère unique est précédé d'un espace.

tm_mday
Jour de la semaine
a écrit le nom du jour de la semaine abrégé, p.ex. Fri (dépendant de la locale) tm_wday
A écrit le nom du jour de la semaine complet, p.ex. Friday (dépendant de la locale) tm_wday
w écrit le jour de la semaine sous forme de nombre décimal, où dimanche est 0 (intervalle [0-6]) tm_wday
Ow
(C99)
écrit le jour de la semaine, où dimanche est 0, en utilisant le système numérique alternatif, p.ex. 二 au lieu de 2 dans la locale ja_JP tm_wday
u
(C99)
écrit le jour de la semaine sous forme de nombre décimal, où lundi est 1 (format ISO 8601) (intervalle [1-7]) tm_wday
Ou
(C99)
écrit le jour de la semaine, où lundi est 1, en utilisant le système numérique alternatif, p.ex. 二 au lieu de 2 dans la locale ja_JP tm_wday
Heure, minute, seconde
H écrit l'heure sous forme de nombre décimal, horaire sur 24 heures (intervalle [00-23]) tm_hour
OH
(C99)
écrit l'heure de l'horaire sur 24 heures en utilisant le système numérique alternatif, p.ex. 十八 au lieu de 18 dans la locale ja_JP tm_hour
I écrit l'heure sous forme de nombre décimal, horaire sur 12 heures (intervalle [01,12]) tm_hour
OI
(C99)
écrit l'heure de l'horaire sur 12 heures en utilisant le système numérique alternatif, p.ex. 六 au lieu de 06 dans la locale ja_JP tm_hour
M écrit la minute sous forme de nombre décimal (intervalle [00,59]) tm_min
OM
(C99)
écrit la minute en utilisant le système numérique alternatif, p.ex. 二十五 au lieu de 25 dans la locale ja_JP tm_min
S écrit la seconde sous forme de nombre décimal (intervalle [00,60]) tm_sec
OS
(C99)
écrit la seconde en utilisant le système numérique alternatif, p.ex. 二十四 au lieu de 24 dans la locale ja_JP tm_sec
Autre
c écrit la chaîne de date et d'heure standard, p.ex. Sun Oct 17 04:41:13 2010 (dépendant de la locale) tous
Ec
(C99)
écrit la chaîne de date et d'heure alternative, p.ex. en utilisant 平成23年 (année Heisei 23) au lieu de 2011年 (année 2011) dans la locale ja_JP tous
x écrit la représentation de date localisée (dépendant de la locale) tous
Ex
(C99)
écrit la représentation de date alternative, p.ex. en utilisant 平成23年 (année Heisei 23) au lieu de 2011年 (année 2011) dans la locale ja_JP tous
X écrit la représentation d'heure localisée, p.ex. 18:40:20 ou 6:40:20 PM (dépendant de la locale) tous
EX
(C99)
écrit la représentation d'heure alternative (dépendant de la locale) tous
D
(C99)
équivalent à "%m/%d/%y" tm_mon, tm_mday, tm_year
F
(C99)
équivalent à "%Y-%m-%d" (le format de date ISO 8601) tm_mon, tm_mday, tm_year
r
(C99)
écrit l'heure horaire sur 12 heures localisée (dépendant de la locale) tm_hour, tm_min, tm_sec
R
(C99)
équivalent à "%H:%M" tm_hour, tm_min
T
(C99)
équivalent à "%H:%M:%S" (le format d'heure ISO 8601) tm_hour, tm_min, tm_sec
p écrit le a.m. ou p.m. localisé (dépendant de la locale) tm_hour
z
(C99)
écrit le décalage par rapport à UTC au format ISO 8601 (p.ex. -0430), ou aucun caractère si l'information de fuseau horaire n'est pas disponible tm_isdst
Z écrit le nom ou l'abréviation du fuseau horaire dépendant de la locale, ou aucun caractère si l'information de fuseau horaire n'est pas disponible tm_isdst

Valeur de retour

Le nombre d'octets écrits dans le tableau de caractères pointé par str sans inclure le '\0' de terminaison en cas de succès. Si count a été atteint avant que la chaîne entière puisse être stockée, 0 est renvoyé et le contenu est indéterminé.

Exemple

#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");
}

Sortie possible :

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

Références

  • Norme C23 (ISO/IEC 9899:2024):
  • 7.27.3.5 La fonction strftime (p: TBD)
  • Norme C17 (ISO/IEC 9899:2018):
  • 7.27.3.5 La fonction strftime (p: 288-291)
  • Norme C11 (ISO/IEC 9899:2011):
  • 7.27.3.5 La fonction strftime (p: 394-397)
  • Norme C99 (ISO/IEC 9899:1999):
  • 7.23.3.5 La fonction strftime (p: 343-347)
  • Norme C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.5 La fonction strftime

Voir aussi

(obsolète dans C23)(C11)
convertit un objet tm en une représentation textuelle
(fonction)
(obsolète dans C23)(C11)
convertit un objet time_t en une représentation textuelle
(fonction)
convertit un objet tm en une représentation textuelle personnalisée en chaîne large
(fonction)
Documentation C++ pour strftime