Namespaces
Variants

std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put

From cppreference.net
std::time_put
Member functions
time_put::put time_put::do_put
Défini dans l'en-tête <locale>
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

const CharT * fmtbeg, const CharT * fmtend ) const ;
(1)
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier = 0 ) const ;
(2)
protected :

virtual iter_type do_put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier ) const ;
(3)

Convertit la date et l'heure du calendrier stockées dans l'objet std::tm pointé par t en une chaîne de caractères, selon la chaîne de format [fmtbeg, fmtend) . La chaîne de format est la même que celle utilisée par std:: strftime , mais chaque spécificateur de format est traité par un appel individuel à do_put() , qui peut être personnalisé en étendant cette facette.

1) Parcourt la séquence de caractères [fmtbeg, fmtend) en examinant les caractères. Chaque caractère qui ne fait pas partie d'une séquence de format est écrit immédiatement dans l'itérateur de sortie out . Pour identifier les séquences de format, cette fonction réduit le caractère suivant c dans [fmtbeg, fmtend) comme par std:: ctype < char_type > ( str. getloc ( ) ) . narrow ( c, 0 ) et s'il est égal à '%' , le ou les deux caractères suivants sont comparés à la liste des séquences de format reconnues par std::strftime ainsi que tous les formats supplémentaires définis par l'implémentation supportés par cette locale. Pour chaque séquence de format valide, un appel à do_put ( out, str, fill, t, format, modifier ) est effectué, où format est le caractère de séquence de format, et modifier est le modificateur optionnel de séquence de format ( 'E' ou 'O' ). Une valeur de ' \0 ' est utilisée si le modificateur est absent.
2) Appelle la fonction membre do_put de la classe la plus dérivée.
3) Convertit la date et l'heure du calendrier stockées dans l'objet std::tm pointé par t en une chaîne de caractères, selon la séquence de conversion de format formée en concaténant '%' , la valeur de modifier si elle n'est pas ' \0 ' , et la valeur de format . Le format est interprété de la même manière que la fonction std::strftime , sauf que les formats décrits comme dépendants de la locale sont définis par cette locale, et que des spécificateurs de format supplémentaires peuvent être pris en charge (l'argument fill est fourni pour que ces spécificateurs de format définis par l'implémentation puissent l'utiliser). La chaîne est écrite dans l'itérateur de sortie out .

Table des matières

Paramètres

out - itérateur de sortie où le résultat de la conversion est écrit
str - un objet de flux que cette fonction utilise pour obtenir les facettes de locale lorsque nécessaire, par ex. std::ctype pour réduire les caractères
t - pointeur vers l'objet std::tm depuis lequel les valeurs de date/heure sont obtenues
fmtbeg - pointeur vers le premier caractère d'une séquence de caractères char_type spécifiant le format de conversion
fmtend - pointeur vers un caractère après le dernier caractère d'une séquence de caractères char_type spécifiant le format de conversion
fill - caractère de remplissage (généralement un espace)
format - le caractère qui nomme un spécificateur de conversion
modifier - le modificateur optionnel qui peut apparaître entre % et le spécificateur de conversion

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 les paramètres régionaux 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 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
g
(C++11)
écrit les 2 derniers chiffres de l' année ISO 8601 basée sur les semaines , c'est-à-dire l'année qui contient la semaine spécifiée (plage [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 abrégé du mois , par ex. Oct (dépendant 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 les paramètres régionaux 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 la locale 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] ).

Un chiffre unique est précédé 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 hour sous forme de nombre décimal, horloge 24 heures (plage [00-23] ) tm_hour
OH
(C++11)
écrit l'heure à partir de l'horloge 24 heures en utilisant le système numérique alternatif, par exemple 十八 au lieu de 18 dans les paramètres régionaux 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 d'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 alternative de la date , 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 temporelle alternative (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 au format 12 heures localisé (dépendant 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

Itérateur pointant un élément au-delà du dernier caractère produit.

Notes

Aucune gestion d'erreur n'est fournie.

Le caractère de fill est fourni pour les spécificateurs de format définis par l'implémentation et pour les surcharges définies par l'utilisateur de do_put() qui utilisent la logique de remplissage et de padding. Ces implémentations utilisent généralement les indicateurs de formatage de str .

Exemple

#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
void try_time_put(const std::tm* t, const std::string& fmt)
{
    std::cout.imbue(std::locale());
    std::cout << "Dans la locale '" << std::cout.getloc().name() << "' : '";
    std::use_facet<std::time_put<char>>(std::cout.getloc()).put(
        {std::cout}, std::cout, ' ', t, &fmt[0], &fmt[0] + fmt.size());
    std::cout << "'\n";
}
int main()
{
    std::time_t t = std::time(NULL);
    std::tm tm = *std::localtime(&t);
    std::string fmt = "%c";
    std::cout << "Utilisation de la chaîne de format '" << fmt
              << "' pour formater l'heure : " << std::ctime(&t) << '\n';
    std::locale::global(std::locale("de_DE.utf8"));
    try_time_put(&tm, fmt);
    std::locale::global(std::locale("el_GR.utf8"));
    try_time_put(&tm, fmt);
    std::locale::global(std::locale("ja_JP.utf8"));
    try_time_put(&tm, fmt);
}

Sortie possible :

Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013
In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST'
In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST'
In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'

Rapports de défauts

Les rapports de défauts modifiant le comportement suivants ont été appliqués rétroactivement aux normes C++ précédemment publiées.

DR Applied to Behavior as published Correct behavior
LWG 164 C++98 l'objectif du paramètre fill n'était pas clair clarifié

Voir aussi

(C++11)
formate et affiche une valeur de date/heure selon le format spécifié
(fonction template)
[virtual] (C++11)
extrait les composants de date/heure d'un flux d'entrée, selon le format spécifié
(fonction membre protégée virtuelle de std::time_get<CharT,InputIt> )