Namespaces
Variants

std:: get_time

From cppreference.net
< cpp ‎ | io ‎ | manip
Défini dans l'en-tête <iomanip>
template < class CharT >
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ;
(depuis C++11)

Lorsqu'il est utilisé dans une expression in >> get_time ( tmb, fmt ) , il analyse l'entrée de caractères comme une valeur de date/heure selon la chaîne de format fmt conformément au facet std::time_get de la locale actuellement imbriquée dans le flux d'entrée in . La valeur résultante est stockée dans un objet std::tm pointé par tmb .

Table des matières

Paramètres

tmb - pointeur valide vers l'objet std::tm où le résultat sera stocké
fmt - pointer to a null-terminated CharT string specifying the conversion format

La chaîne de format est constituée de zéro ou plusieurs spécificateurs de conversion, de caractères d'espacement et de caractères ordinaires (à l'exception de % ). Chaque caractère ordinaire doit correspondre à un caractère du flux d'entrée dans 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é s'il n'est pas pris en charge 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 caractère d'espacement (aucun)
Année
Y analyse l'année complète year comme un nombre décimal à 4 chiffres, les zéros initiaux autorisés mais non requis tm_year
EY analyse year dans la représentation alternative, par ex. 平成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 year 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 comme un 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 les paramètres régionaux 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/du mois
j analyse le jour de l'année comme un nombre décimal (plage [001,366] ), les zéros initiaux 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 en tête 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 les paramètres régionaux 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 d'une 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 non significatifs autorisés mais non requis tm_sec
OS analyse les secondes en utilisant le système numérique alternatif, par exemple 二十四 est analysé comme 24 dans la locale ja_JP tm_sec
Autre
c analyse le format de chaîne de date et d'heure standard de la locale, par ex. 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 de date standard de la locale tout
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 tous
EX analyse la représentation alternative de l'heure de la locale tout
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

Un objet de type non spécifié tel que

  • si in est un objet de type std:: basic_istream < CharT, Traits > , l'expression in >> get_time ( tmb, fmt )
    • a pour type std:: basic_istream < CharT, Traits > &
    • a pour valeur in
    • se comporte comme si elle appelait f ( in, tmb, fmt )

où la fonction f est définie comme :

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, std::tm* tmb, const CharT* fmt)
{
    using Iter = std::istreambuf_iterator<CharT, Traits>;
    using TimeGet = time_get<CharT, Iter>;
    std::ios_base::iostate err = std::ios_base::goodbit;
    const TimeGet& tg = std::use_facet<TimeGet>(str.getloc());
    tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
        fmt, fmt + Traits::length(fmt));
    if (err != std::ios_base::goodbit)
        str.setstate(err);
}
**Note:** Le code C++ n'a pas été traduit conformément aux instructions, car il se trouve dans des balises `
` et contient des termes spécifiques au C++ qui doivent être préservés. Seul le texte environnant aurait été traduit, mais dans ce cas, il n'y a pas de texte à traduire en dehors du code.

Notes

Comme spécifié dans std::time_get::do_get , que cette fonction appelle, il n'est pas spécifié si cette fonction remet à zéro les champs dans * tmb qui ne sont pas définis directement par les spécificateurs de conversion apparaissant dans fmt : les programmes portables doivent initialiser tous les champs de * tmb à zéro avant d'appeler std::get_time .

Exemple

Remarque : choisissez clang ou gcc >= 12.1 pour observer le résultat. libstdc++ avant la version 12.1 n'implémente pas correctement le % b spécificateur : bug #78714 .

#include <iomanip>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail())
        std::cout << "Parse failed\n";
    else
        std::cout << std::put_time(&t, "%c") << '\n';
}

Résultat possible :

Sun Feb 18 23:12:34 2011

Voir aussi

analyse les valeurs de temps/date d'une séquence de caractères d'entrée vers std::tm
(modèle de classe)
(C++11)
formate et sort une valeur de date/heure selon le format spécifié
(modèle de fonction)
(C++20)
analyse un objet chrono depuis un flux
(modèle de fonction)