std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(1) | |
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(2) | |
|
protected
:
virtual
iter_type do_put
(
iter_type out,
std::
ios_base
&
str,
|
(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.
[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.
do_put
de la classe la plus dérivée.
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 :
|
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 :
|
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 :
|
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>
)
|