Namespaces
Variants

std::chrono:: parse

From cppreference.net
Défini dans l'en-tête <chrono>
template < class CharT, class Parsable >
/* non spécifié */ parse ( const CharT * fmt, Parsable & tp ) ;
(1) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,

Parsable & tp ) ;
(2) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const CharT * fmt, Parsable & tp,

std:: basic_string < CharT, Traits, Alloc > & abbrev ) ;
(3) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,
Parsable & tp,

std:: basic_string < CharT, Traits, Alloc > & abbrev ) ;
(4) (depuis C++20)
template < class CharT, class Parsable >

/* non spécifié */ parse ( const CharT * fmt, Parsable & tp,

std:: chrono :: minutes & offset ) ;
(5) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,

Parsable & tp, std:: chrono :: minutes & offset ) ;
(6) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const CharT * fmt, Parsable & tp,
std:: basic_string < CharT, Traits, Alloc > & abbrev,

std:: chrono :: minutes & offset ) ;
(7) (depuis C++20)
template < class CharT, class Traits, class Alloc, class Parsable >

/* non spécifié */ parse ( const std:: basic_string < CharT, Traits, Alloc > & fmt,
Parsable & tp,
std:: basic_string < CharT, Traits, Alloc > & abbrev,

std:: chrono :: minutes & offset ) ;
(8) (depuis C++20)

Retourne un objet manip de type non spécifié tel que, étant donné un objet std:: basic_istream < CharT, Traits > is , l'expression is >> manip appelle from_stream (non qualifié, pour permettre la recherche dépendante des arguments ) comme suit :

1) from_stream ( is, fmt, tp )
2) from_stream ( is, fmt. c_str ( ) , tp )
3) from_stream ( is, fmt, tp, std:: addressof ( abbrev ) )
4) from_stream ( is, fmt. c_str ( ) , tp, std:: addressof ( abbrev ) )
5) from_stream ( is, fmt, tp,
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
6) from_stream ( is, fmt. c_str ( ) , tp,
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
7) from_stream ( is, fmt, tp, std:: addressof ( abbrev ) , & offset )
8) from_stream ( is, fmt. c_str ( ) , tp, std:: addressof ( abbrev ) , & offset ) .

L'expression is >> manip est une lvalue de type std:: basic_istream < CharT, Traits > avec la valeur is .

Ces surcharges participent à la résolution de surcharge uniquement si l'expression from_stream correspondante est bien formée.

Il est recommandé que les implémentations rendent difficile l'utilisation de références potentiellement pendantes vers la chaîne de format, par exemple en rendant les types de retour non déplaçables et en empêchant operator >> d'accepter des lvalues des types de retour.

Table des matières

Paramètres

fmt - une chaîne de format (voir ci-dessous)
tp - objet pour contenir le résultat de l'analyse
abbrev - chaîne pour contenir l'abréviation ou le nom du fuseau horaire correspondant au %Z spécificateur
offset - durée pour représenter le décalage par rapport à UTC correspondant au %z spécificateur

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. Chaque caractère ordinaire, à l'exception des caractères d'espacement et du caractère nul de fin, correspond à un caractère identique provenant du flux d'entrée, ou provoque l'échec de la fonction si le caractère suivant dans le flux n'est pas égal par comparaison.

Chaque caractère d'espacement correspond à zéro ou plusieurs caractères d'espacement dans le flux d'entrée.

Chaque spécificateur de conversion non modifié commence par un % suivi d'un caractère qui détermine le comportement du spécificateur. Certains spécificateurs de conversion ont une forme modifiée dans laquelle un caractère modificateur E ou O est inséré après le caractère % . Certains spécificateurs de conversion ont une forme modifiée dans laquelle un paramètre de largeur donné sous forme d'entier décimal positif (représenté par N ci-dessous) est inséré après le caractère % . Chaque spécificateur de conversion entraîne l'interprétation des caractères correspondants comme des parties de types date et heure selon le tableau ci-dessous.

Une séquence de caractères dans la chaîne de format qui commence par un % mais ne correspond pas à l'un des spécificateurs de conversion ci-dessous est interprétée comme des caractères ordinaires.

Si from_stream ne parvient pas à analyser tout ce qui est spécifié par la chaîne de format, ou si des informations insuffisantes sont analysées pour spécifier un résultat complet, ou si l'analyse révèle des informations contradictoires, is. setstate ( std:: ios_base :: failbit ) est appelé.

Les spécificateurs de conversion suivants sont disponibles :

Spécificateur
de conversion
Explication
%% Correspond à un caractère % littéral.
%n Correspond à un caractère d'espacement.
%t Correspond à zéro ou un caractère d'espacement.
Année
%C
% N C
%EC
Analyse le siècle comme un nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros en tête sont autorisés mais pas obligatoires.

La commande modifiée %EC interprète la représentation alternative du siècle selon les paramètres régionaux.

%y
% N y
%Ey
%Oy
Analyse les deux derniers chiffres décimaux de l'année. Si le siècle n'est pas spécifié autrement (par exemple avec %C), les valeurs dans la plage [69, 99] sont présumées se référer aux années 1969 à 1999, et les valeurs dans la plage [00, 68] sont présumées se référer aux années 2000 à 2068. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros non significatifs sont autorisés mais pas obligatoires.

Les commandes modifiées %Ey et %Oy interprètent la représentation alternative de la locale.

%Y
% N Y
%EY
Analyse l'année en tant que nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 4. Les zéros en tête sont autorisés mais pas obligatoires.

La commande modifiée %EY interprète la représentation alternative de la locale.

Mois
%b
%B
%h
Analyse le nom complet ou abrégé du mois, insensible à la casse, selon les paramètres régionaux.
%m
% N m
%Om
Analyse le mois sous forme de nombre décimal (janvier correspond à 1 ). La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros initiaux sont autorisés mais pas obligatoires.

La commande modifiée %Om interprète la représentation alternative de la locale.

Jour
%d
% N d
%Od
%e
% N e
%Oe
Analyse le jour du mois comme un nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros non significatifs sont autorisés mais pas obligatoires.

Les commandes modifiées %Od et %Oe interprètent la représentation alternative de la locale.

Jour de la semaine
%a
%A
Analyse le nom complet ou abrégé du jour de la semaine, insensible à la casse, selon les paramètres régionaux.
%u
% N u
Analyse le jour de la semaine ISO sous forme de nombre décimal (1-7), où lundi correspond à 1 . La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 1. Les zéros en tête sont autorisés mais non requis.
%w
% N w
%Ow
Analyse le jour de la semaine sous forme de nombre décimal (0-6), où dimanche est 0 . La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 1. Les zéros non significatifs sont autorisés mais pas obligatoires.

La commande modifiée %Ow interprète la représentation alternative de la locale.

Année ISO 8601 basée sur les semaines

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
%g
% N g
Analyse les deux derniers chiffres décimaux de l'année basée sur la semaine ISO 8601. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros en tête sont autorisés mais pas obligatoires.
%G
% N G
Analyse l'année basée sur la semaine ISO 8601 comme un nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 4. Les zéros en tête sont autorisés mais pas obligatoires.
%V
% N V
Analyse la semaine ISO 8601 de l'année sous forme de nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros non significatifs sont autorisés mais pas obligatoires.
Semaine/jour de l'année
%j
% N j
Analyse le jour de l'année sous forme de nombre décimal (le 1er janvier est 1 ). La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 3. Les zéros non significatifs sont autorisés mais pas obligatoires.
%U
% N U
%OU
Analyse le numéro de la semaine de l'année en tant que nombre décimal. Le premier dimanche de l'année est le premier jour de la semaine 01. Les jours de la même année antérieurs à celui-ci sont dans la semaine 00. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros en tête sont autorisés mais pas obligatoires.

La commande modifiée %OU interprète la représentation alternative de la locale.

%W
% N W
%OW
Analyse le numéro de la semaine de l'année en tant que nombre décimal. Le premier lundi de l'année est le premier jour de la semaine 01. Les jours de la même année antérieurs à celui-ci sont dans la semaine 00. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros en tête sont autorisés mais pas obligatoires.

La commande modifiée %OW interprète la représentation alternative de la locale.

Date
%D Équivalent à "%m/%d/%y" .
%F
% N F
Équivalent à "%Y-%m-%d" . Si la largeur est spécifiée, elle est uniquement appliquée au %Y .
%x
%Ex
Analyse la représentation de date de la locale.

La commande modifiée %Ex interprète la représentation de date alternative de la locale.

Heure de la journée
%H
% N H
%OH
Analyse l'heure (format 24 heures) sous forme de nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros initiaux sont autorisés mais pas obligatoires.

La commande modifiée %OH interprète la représentation alternative de la locale.

%I
% N I
%OI
Analyse l'heure (format 12 heures) sous forme de nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros initiaux sont autorisés mais non obligatoires.

La commande modifiée %OI interprète la représentation alternative de la locale.

%M
% N M
%OM
Analyse la minute sous forme de nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros non significatifs sont autorisés mais pas obligatoires.

La commande modifiée %OM interprète la représentation alternative de la locale.

%S
% N S
%OS
Analyse la seconde comme un nombre décimal. La largeur N spécifie le nombre maximum de caractères à lire. La largeur par défaut est 2. Les zéros non significatifs sont autorisés mais pas obligatoires.

La commande modifiée %OS interprète la représentation alternative de la locale.

%p Analyse l'équivalent local des désignations AM/PM associées à une horloge de 12 heures.
%R Équivalent à "%H:%M" .
%T Équivalent à "%H:%M:%S" .
%r Analyse l'heure au format 12 heures de la locale.
%X
%EX
Analyse la représentation horaire de la locale.

La commande modifiée %EX interprète la représentation horaire alternative de la locale.

Divers
%c
%Ec
Analyse la représentation de la date et de l'heure de la locale.

La commande modifiée %Ec interprète la représentation alternative de la date et de l'heure de la locale.

%z
%Ez
%Oz
Analyse le décalage horaire par rapport à UTC au format [+|-]hh[mm] . Par exemple, -0430 correspond à 4 heures 30 minutes derrière UTC et 04 correspond à 4 heures devant UTC.

Les commandes modifiées %Ez et %Oz analysent le format [+|-]h[h][:mm] (c'est-à-dire en exigeant un : entre les heures et les minutes et en rendant le zéro initial pour l'heure facultatif).

%Z Analyse l'abréviation ou le nom du fuseau horaire, pris comme la plus longue séquence de caractères qui contient uniquement les caractères A à Z , a à z , 0 à 9 , - , + , _ , et / .

Exemple

#include <chrono>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    auto parse = [&](auto str, auto fmt, auto o)
    {
        std::istringstream is{str};
        is.imbue(std::locale("en_US.utf-8"));
        is >> std::chrono::parse(fmt, o);
        is.fail() ? std::cout << "Parse failed!\n" : std::cout << o << '\n';
    };
    parse("01:02:03", "%H:%M:%S", std::chrono::hours{});
    parse("01:02:03", "%H:%M:%S", std::chrono::minutes{});
    parse("01:02:03", "%H:%M:%S", std::chrono::seconds{});
}

Sortie possible :

1h
62min
3723s

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 Appliqué à Comportement publié Comportement corrigé
LWG 3554 C++20 les surcharges pour les séquences de caractères simples terminées par null manquaient ajoutées

Voir aussi

analyse un sys_time depuis un flux selon le format fourni
(modèle de fonction)
analyse un utc_time depuis un flux selon le format fourni
(modèle de fonction)
analyse un tai_time depuis un flux selon le format fourni
(modèle de fonction)
analyse un gps_time depuis un flux selon le format fourni
(modèle de fonction)
analyse un file_time depuis un flux selon le format fourni
(modèle de fonction)
analyse un local_time depuis un flux selon le format fourni
(modèle de fonction)
analyse une year depuis un flux selon le format fourni
(modèle de fonction)
analyse un month depuis un flux selon le format fourni
(modèle de fonction)
analyse un day depuis un flux selon le format fourni
(modèle de fonction)
analyse un weekday depuis un flux selon le format fourni
(modèle de fonction)
analyse un month_day depuis un flux selon le format fourni
(modèle de fonction)
analyse un year_month depuis un flux selon le format fourni
(modèle de fonction)
analyse un year_month_day depuis un flux selon le format fourni
(modèle de fonction)
(C++11)
analyse une valeur de date/heure selon un format spécifié
(modèle de fonction)