Namespaces
Variants

std:: strftime

From cppreference.net
< cpp ‎ | chrono ‎ | c
Défini dans l'en-tête <ctime>
std:: size_t strftime ( char * str, std:: size_t count, const char * format, const std:: tm * tp ) ;

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

Table des matières

Paramètres

str - pointeur vers le premier élément du tableau de caractères pour la sortie
count - nombre maximum d'octets à écrire
format - pointeur vers une chaîne de caractères multioctets terminée par un caractère nul spécifiant le format de conversion
tp - pointeur vers l'objet contenant les informations de date et d'heure à convertir

Chaîne de format

La chaîne de format est constituée de zéro ou plusieurs spécificateurs de conversion et de caractères ordinaires (à l'exception de % ). Tous les caractères ordinaires, y compris le caractère nul de fin, sont copiés dans la chaîne de sortie sans modification. Chaque spécification de conversion commence par le caractère % , éventuellement suivi du modificateur E ou O (ignoré s'il n'est pas pris en charge par les paramètres régionaux), suivi du caractère qui détermine le comportement du spécificateur. Les spécificateurs de format suivants sont disponibles :

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

Dans l'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 abrégé du mois , par ex. Oct (dépend des paramètres régionaux) tm_mon
h
(C++11)
synonyme de b tm_mon
B écrit le nom complet du mois , par ex. October (dépendant des paramètres régionaux) tm_mon
m écrit le mois sous forme de nombre décimal (plage [01,12] ) tm_mon
Om
(C++11)
écrit le mois en utilisant le système numérique alternatif, par exemple 十二 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 (le dimanche est le premier jour de la semaine) (plage [00,53] ) tm_year , tm_wday , tm_yday
OU
(C++11)
écrit la semaine de l'année , comme par %U , en utilisant le système numérique alternatif, par exemple 五十二 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 (le lundi est le premier jour de la semaine) (plage [00,53] ) tm_year , tm_wday , tm_yday
OW
(C++11)
écrit la semaine de l'année , comme par %W , en utilisant le système numérique alternatif, par exemple 五十二 au lieu de 52 dans les paramètres régionaux ja_JP tm_year , tm_wday , tm_yday
V
(C++11)
écrit la semaine ISO 8601 de l'année (plage [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
(C++11)
écrit la semaine de l'année , comme par %V , en utilisant le système numérique alternatif, par exemple 五十二 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 (plage [001,366] ) tm_yday
d écrit le jour du mois sous forme de nombre décimal (plage [01,31] ) tm_mday
Od
(C++11)
écrit le jour du mois en base zéro en utilisant le système numérique alternatif, par exemple 二十七 au lieu de 27 dans les paramètres régionaux ja_JP

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

tm_mday
e
(C++11)
écrit le jour du mois sous forme de nombre décimal (plage [1,31] ).

Les chiffres uniques sont précédés d'un espace.

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

Valeur de retour

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

Exemple

#include <ctime>
#include <iostream>
#include <iterator>
#include <locale>
void utcExample()
{
    // Exemple du format UTC très populaire RFC 3339
    std::time_t time = std::time({});
    char timeString[std::size("yyyy-mm-ddThh:mm:ssZ")];
    std::strftime(std::data(timeString), std::size(timeString),
                  "%FT%TZ", std::gmtime(&time));
    std::cout << timeString << '\n';
}
int main()
{
    std::time_t t = std::time(nullptr);
    char mbstr[100];
    if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t)))
        std::cout << mbstr << '\n';
    std::locale::global(std::locale("ja_JP.utf8"));
    if (std::strftime(mbstr, sizeof(mbstr), "%A %c", std::localtime(&t)))
        std::cout << mbstr << '\n';
    utcExample();
}

Sortie possible :

Tuesday Tue Sep  7 19:40:35 2021
火曜日 2021年09月07日 19時40分35秒
2021-09-07T19:40:35Z

Voir aussi

convertit un objet std::tm en une représentation textuelle
(fonction)
convertit un objet std::time_t en une représentation textuelle
(fonction)
convertit un objet std::tm en une représentation textuelle personnalisée de chaîne large
(fonction)
(C++11)
formate et sort une valeur de date/heure selon le format spécifié
(modèle de fonction)
support de formatage pour hh_mm_ss
(spécialisation de modèle de classe)
Documentation C pour strftime