std::time_get<CharT,InputIt>:: get, std::time_get<CharT,InputIt>:: do_get
|
Défini dans l'en-tête
<locale>
|
||
|
public
:
iter_type get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(1) | (depuis C++11) |
|
protected
:
virtual
iter_type do_get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(2) | (depuis C++11) |
do_get
. La fonction
get
effectue les opérations suivantes :
Premièrement, efface les bits d'erreur dans
err
en exécutant
err
=
std::
ios_base
::
goodbit
. Puis entre dans une boucle, qui se termine dès que l'une des conditions suivantes devient vraie (vérifiée dans cet ordre) :
eofbit
et
failbit
dans
err
.
-
- Dans le corps de la boucle, les étapes suivantes se produisent :
%
et le caractère de format, s'il est présent). S'il n'y a pas de modificateur, la valeur
'
\0
'
est utilisée. Si la chaîne de format est ambiguë ou se termine trop tôt pour déterminer le spécificateur de conversion après
'%'
,
eofbit
est positionné dans
err
et la boucle est terminée. Si, après l'appel à
do_get
, aucun bit d'erreur n'est positionné dans
err
, la fonction incrémente
fmtbeg
pour pointer juste après le spécificateur de conversion et poursuit la boucle.
failbit
dans
err
.
-
-
Premièrement, efface les bits d'erreur dans
err
en exécutant
err
=
std::
ios_base
::
goodbit
. Ensuite, lit les caractères de la séquence d'entrée
[
beg, end
)
qui sont attendus par le spécificateur de format
std::time_get
formé en combinant
'%'
,
modifier
(si différent de
'
\0
'
), et
format
. Si les caractères ne forment pas un spécificateur de conversion valide, positionne
failbitdans err . Si la fin du flux d'entrée est atteinte après lecture d'un caractère, positionneeofbitdans err . Si la chaîne d'entrée a été analysée avec succès, met à jour les champs correspondants de * t .
-
Premièrement, efface les bits d'erreur dans
err
en exécutant
err
=
std::
ios_base
::
goodbit
. Ensuite, lit les caractères de la séquence d'entrée
[
beg, end
)
qui sont attendus par le spécificateur de format
std::time_get
formé en combinant
'%'
,
modifier
(si différent de
'
\0
'
), et
format
. Si les caractères ne forment pas un spécificateur de conversion valide, positionne
-
-
Pour les spécificateurs de conversion complexes, tels que
'%x'
ou
'%c'
, ou les directives qui utilisent les modificateurs
'E'
et
'O'
, la fonction peut échouer à déterminer certaines des valeurs à stocker dans
*
t
. Dans ce cas, elle positionne
eofbitdans err et laisse ces champs dans un état non spécifié.
-
Pour les spécificateurs de conversion complexes, tels que
'%x'
ou
'%c'
, ou les directives qui utilisent les modificateurs
'E'
et
'O'
, la fonction peut échouer à déterminer certaines des valeurs à stocker dans
*
t
. Dans ce cas, elle positionne
Table des matières |
Paramètres
| beg | - | itérateur désignant le début de la séquence à analyser |
| end | - | itérateur indiquant la fin de la séquence à analyser (position après le dernier élément) |
| str | - | un objet de flux utilisé par cette fonction pour obtenir les facettes de locale lorsque nécessaire, par exemple std::ctype pour ignorer les espaces blancs ou std::collate pour comparer des chaînes |
| err | - | objet d'indicateurs d'erreur de flux modifié par cette fonction pour signaler les erreurs |
| t | - | pointeur vers l'objet std::tm qui contiendra le résultat de cet appel de fonction |
| fmtbeg | - |
pointeur vers le premier caractère d'une séquence de caractères
char_type
spécifiant le format de conversion (voir ci-dessous)
|
| fmtend | - |
pointeur indiquant la fin d'une séquence de caractères
char_type
spécifiant le format de conversion (position après le dernier caractère)
|
| 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
|
La chaîne de format consiste en zéro ou plusieurs spécificateurs de conversion, des caractères d'espacement et des caractères ordinaires (à l'exception de
%
). Chaque caractère ordinaire doit correspondre à un caractère dans le flux d'entrée lors d'une comparaison insensible à la casse. Chaque caractère d'espacement correspond à un espacement arbitraire dans la chaîne d'entrée. Chaque spécification de conversion commence par le caractère
%
, suivi optionnellement du modificateur
E
ou
O
(ignoré si non supporté par les paramètres régionaux), puis du caractère qui détermine le comportement du spécificateur. Les spécificateurs de format correspondent à la fonction POSIX
strptime()
:
|
Spécificateur
de conversion |
Explication | Écrit dans les champs |
|---|---|---|
%
|
correspond à un caractère
%
littéral. La spécification de conversion complète doit être
%%
|
(aucun) |
t
|
correspond à tout caractère d'espacement | (aucun) |
n
|
correspond à tout espace blanc | (aucun) |
| Année | ||
Y
|
analyse l'année complète year comme un nombre décimal à 4 chiffres, les zéros non significatifs sont autorisés mais non requis |
tm_year
|
EY
|
analyse year dans la représentation alternative, par exemple 平成23年 (année Heisei 23) qui écrit 2011 dans tm_year pour la locale ja_JP |
tm_year
|
y
|
analyse les 2 derniers chiffres de l'
année
comme un nombre décimal. La plage
[69,99]
donne les valeurs 1969 à 1999, la plage
[00,68]
donne 2000-2068
|
tm_year
|
Oy
|
analyse les 2 derniers chiffres de l' année en utilisant le système numérique alternatif, par exemple 十一 est analysé comme 11 dans la locale ja_JP |
tm_year
|
Ey
|
analyse l'
année
comme décalage depuis la période du calendrier alternatif de la locale
%EC
|
tm_year
|
C
|
analyse les 2 premiers chiffres de
year
comme un nombre décimal (plage
[00,99]
)
|
tm_year
|
EC
|
analyse 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
|
| Mois | ||
b
|
analyse le nom du mois, complet ou abrégé, par ex.
Oct
|
tm_mon
|
h
|
synonyme de
b
|
tm_mon
|
B
|
synonyme de
b
|
tm_mon
|
m
|
analyse le
mois
sous forme de nombre décimal (plage
[01,12]
), les zéros initiaux autorisés mais non requis
|
tm_mon
|
Om
|
analyse le mois en utilisant le système numérique alternatif, par exemple 十二 est analysé comme 12 dans la locale ja_JP |
tm_mon
|
| Semaine | ||
U
|
analyse la
semaine de l'année
comme un nombre décimal (le dimanche est le premier jour de la semaine) (plage
[00,53]
), les zéros initiaux autorisés mais non requis
|
tm_year
,
tm_wday
,
tm_yday
|
OU
|
analyse la
semaine de l'année
, comme avec
%U
, en utilisant le système numérique alternatif, par exemple 五十二 est analysé comme 52 dans la locale ja_JP
|
tm_year
,
tm_wday
,
tm_yday
|
W
|
analyse la
semaine de l'année
comme un nombre décimal (le lundi est le premier jour de la semaine) (plage
[00,53]
), les zéros initiaux autorisés mais non requis
|
tm_year
,
tm_wday
,
tm_yday
|
OW
|
analyse la
semaine de l'année
, comme avec
%W
, en utilisant le système numérique alternatif, par exemple 五十二 est analysé comme 52 dans les paramètres régionaux ja_JP
|
tm_year
,
tm_wday
,
tm_yday
|
| Jour de l'année/mois | ||
j
|
analyse le
jour de l'année
comme un nombre décimal (plage
[001,366]
), les zéros initiaux sont autorisés mais non requis
|
tm_yday
|
d
|
analyse le
jour du mois
sous forme de nombre décimal (plage
[01,31]
), les zéros initiaux sont autorisés mais non requis
|
tm_mday
|
Od
|
analyse le jour du mois en utilisant le système numérique alternatif, par exemple 二十七 est analysé comme 27 dans la locale ja_JP, les zéros non significatifs sont autorisés mais non requis |
tm_mday
|
e
|
synonyme de
d
|
tm_mday
|
Oe
|
synonyme de
Od
|
tm_mday
|
| Jour de la semaine | ||
a
|
analyse le nom du jour de la semaine, complet ou abrégé, par exemple
Fri
|
tm_wday
|
A
|
synonyme de
a
|
tm_wday
|
w
|
analyse
weekday
comme un nombre décimal, où dimanche est
0
(plage
[0-6]
)
|
tm_wday
|
Ow
|
analyse
weekday
comme un nombre décimal, où dimanche est
0
, en utilisant le système numérique alternatif, par exemple 二 est analysé comme 2 dans la locale ja_JP
|
tm_wday
|
| Heure, minute, seconde | ||
H
|
analyse l'
heure
comme un nombre décimal, horloge 24 heures (plage
[00-23]
), les zéros initiaux autorisés mais non requis
|
tm_hour
|
OH
|
analyse l' heure à partir de l'horloge 24 heures en utilisant le système numérique alternatif, par exemple 十八 est analysé comme 18 dans la locale ja_JP |
tm_hour
|
I
|
analyse
hour
comme un nombre décimal, horloge 12 heures (plage
[01,12]
), les zéros initiaux autorisés mais non requis
|
tm_hour
|
OI
|
analyse hour à partir de l'horloge 12 heures en utilisant le système numérique alternatif, par exemple 六 se lit comme 06 dans la locale ja_JP |
tm_hour
|
M
|
analyse
minute
comme un nombre décimal (plage
[00,59]
), les zéros non significatifs autorisés mais non requis
|
tm_min
|
OM
|
analyse minute en utilisant le système numérique alternatif, par exemple 二十五 est analysé comme 25 dans la locale ja_JP |
tm_min
|
S
|
analyse
second
comme un nombre décimal (plage
[00,60]
), les zéros initiaux autorisés mais non requis
|
tm_sec
|
OS
|
analyse second en utilisant le système numérique alternatif, par exemple 二十四 est analysé comme 24 dans la locale ja_JP |
tm_sec
|
| Autre | ||
c
|
analyse la chaîne de format standard de date et heure de la locale, par exemple
Sun Oct 17 04:41:13 2010
(dépendant de la locale)
|
tout |
Ec
|
analyse le format alternatif de chaîne de date et d'heure de la locale, par exemple en s'attendant à 平成23年 (année Heisei 23) au lieu de 2011年 (année 2011) dans la locale ja_JP | tout |
x
|
analyse la représentation standard de la date selon les paramètres régionaux | tous |
Ex
|
analyse la représentation de date alternative de la locale, par exemple en s'attendant à 平成23年 (année Heisei 23) au lieu de 2011年 (année 2011) dans la locale ja_JP | tout |
X
|
analyse la représentation horaire standard de la locale | tout |
EX
|
analyse la représentation temporelle alternative de la locale | tous |
D
|
équivalent à "%m / %d / %y " |
tm_mon
,
tm_mday
,
tm_year
|
r
|
analyse l'heure standard sur 12 heures de la locale (en POSIX, "%I : %M : %S %p" ) |
tm_hour
,
tm_min
,
tm_sec
|
R
|
équivalent à "%H : %M" |
tm_hour
,
tm_min
|
T
|
équivalent à "%H : %M : %S" |
tm_hour
,
tm_min
,
tm_sec
|
p
|
analyse l'équivalent local de a.m. ou p.m. |
tm_hour
|
Note :
tm_isdst
n'est pas écrit et doit être défini explicitement pour être utilisé avec des fonctions telles que
mktime
Valeur de retour
Itérateur pointant un caractère au-delà du dernier caractère dans [ beg, end ) qui a été analysé avec succès.
Notes
La comparaison insensible à la casse pour les caractères non-blancs et non- '%' dans la chaîne de format, le facet std::collate de la locale fournie par str est généralement, mais pas nécessairement, utilisé.
Si une erreur d'analyse syntaxique est rencontrée, de nombreuses implémentations de cette fonction laissent * t complètement inchangé.
Il n'est pas spécifié si ces fonctions mettent à zéro les champs dans
*
t
qu'elles ne définissent pas directement : les programmes portables doivent initialiser chaque champ à zéro avant d'appeler
get()
.
Exemple
#include <iomanip> #include <iostream> #include <locale> #include <sstream> int main() { std::istringstream ss("2026-März-12 23:45:56"); ss.imbue(std::locale("de_DE.utf8")); auto& f = std::use_facet<std::time_get<char>>(ss.getloc()); std::tm t{}; std::string s = "%Y-%b-%d %H:%M:%S"; std::ios_base::iostate err = std::ios_base::goodbit; auto ret = f.get({ss}, {}, ss, err, &t, &s[0], &s[0] + s.size()); ss.setstate(err); std::istreambuf_iterator<char> last{}; if (ss) { std::cout << "Successfully parsed as " << std::put_time(&t, "%c") << '\n'; if (ret != last) { std::cout << "Remaining content: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << "The input was fully consumed."; } else { std::cout << "Parse failed.\nUnparsed string: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; }
Sortie :
Successfully parsed as Sun Mar 12 23:45:56 2026 The input was fully consumed.
Voir aussi
|
(C++11)
|
analyse une valeur de date/heure au format spécifié
(modèle de fonction) |