Namespaces
Variants

std:: formatter <std::chrono::duration>

From cppreference.net
Défini dans l'en-tête <chrono>
template < class Rep, class Period, class CharT >
struct formatter < std:: chrono :: duration < Rep, Period > , CharT > ;

Spécialisation de std::formatter qui définit les règles de formatage pour une std::chrono::duration . La duration est interprétée comme l'heure de la journée depuis minuit.

La spécialisation std::formatter n'est généralement pas accédée directement, mais est utilisée via les fonctions de formatage .

Spécification du format

La spécification de format a la forme

fill-and-align  (optionnel) width  (optionnel) precision  (optionnel) L (optionnel) chrono-spec  (optionnel)

fill-and-align , width , et precision ont la même signification que dans la spécification de format standard . precision n'est valide que pour les types std::chrono::duration où le type de représentation Rep est un type à virgule flottante, sinon std::format_error est levée.

La locale utilisée pour le formatage est déterminée comme suit :

  • la locale par défaut "C" si L n'est pas présente dans la spécification de format,
  • sinon, la locale désignée par le std::locale passé à la fonction de formatage, s'il y en a un,
  • sinon ( L est présent mais aucun std::locale n'est passé à la fonction de formatage), la locale globale.

Si l' encodage des littéraux de chaîne (ordinaire ou large) est une forme de codage Unicode et que la locale fait partie d'un ensemble défini par l'implémentation de locales, chaque remplacement dépendant de la locale est effectué comme si la séquence de caractères de remplacement était convertie vers l'encodage du littéral.

La chrono-spec consiste en un ou plusieurs spécificateurs de conversion et des caractères ordinaires (autres que { , } , et % ). Une chrono-spec doit commencer par un spécificateur de conversion. Tous les caractères ordinaires sont écrits en sortie sans modification. Chaque spécificateur de conversion non modifié commence par un caractère % 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 % . Chaque spécificateur de conversion est remplacé par les caractères appropriés en sortie comme décrit ci-dessous.

Sauf indication contraire, si la chrono-spec est vide, l'objet chrono est formaté comme s'il était streamé vers un objet os de type std:: basic_ostringstream < CharT > avec les paramètres régionaux de formatage (l'un des std:: locale :: classic ( ) , l'objet std::locale passé, et std:: locale :: global ( ) ) appliqués et en copiant os. str ( ) dans le tampon de sortie avec un remplissage et des ajustements supplémentaires selon les spécificateurs de format.

Les spécificateurs de format suivants sont disponibles :

Spécificateur de
conversion
Explication
%% Écrit un caractère % littéral.
%n Écrit un caractère de nouvelle ligne.
%t Écrit un caractère de tabulation horizontale.
Heure de la journée
%H
%OH
Écrit l'heure (horloge 24 heures) sous forme de nombre décimal. Si le résultat est un chiffre unique, il est préfixé par 0.

La commande modifiée %OH écrit la représentation alternative de la locale.

%I
%OI
Écrit l'heure (horloge 12 heures) sous forme de nombre décimal. Si le résultat est un chiffre unique, il est préfixé par 0.

La commande modifiée %OI écrit la représentation alternative de la locale.

%M
%OM
Écrit les minutes sous forme de nombre décimal. Si le résultat est un chiffre unique, il est préfixé par 0.

La commande modifiée %OM écrit la représentation alternative de la locale.

%S
%OS
Écrit les secondes sous forme de nombre décimal. Si le nombre de secondes est inférieur à 10, le résultat est préfixé par 0.

Si la précision de l'entrée ne peut pas être exactement représentée en secondes, alors le format est un nombre à virgule flottante décimal avec un format fixe et une précision correspondant à celle de l'entrée (ou à une précision en microsecondes si la conversion en secondes décimales à virgule flottante ne peut pas être faite avec 18 chiffres fractionnaires). Le caractère pour le point décimal est localisé selon la locale.

La commande modifiée %OS écrit la représentation alternative de la locale.

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

La commande modifiée %EX écrit la représentation alternative du temps de la locale.

Comptage de durée
%Q Écrit le nombre de ticks de la durée, c'est-à-dire la valeur obtenue via count() .
%q Écrit le suffixe d'unité de la durée, tel que spécifié dans operator<<() .

Les spécificateurs suivants sont reconnus, mais entraîneront std::format_error à être levé :

Spécificateur
de conversion
Explication
Année
%C
%EC
Écrit l'année divisée par 100 en utilisant la division entière. Si le résultat est un chiffre décimal unique, il est préfixé par 0.

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

%y
%Oy
%Ey
Écrit les deux derniers chiffres décimaux de l'année. Si le résultat est un seul chiffre, il est préfixé par 0.

La commande modifiée %Oy écrit la représentation alternative selon les paramètres régionaux.

La commande modifiée %Ey écrit la représentation alternative de l'écart par rapport à %EC (année uniquement).

%Y
%EY
Écrit l'année sous forme de nombre décimal. Si le résultat compte moins de quatre chiffres, il est complété à gauche par des 0 pour atteindre quatre chiffres.

La commande modifiée %EY écrit la représentation alternative complète de l'année selon les paramètres régionaux.

Mois
%b
%h
Écrit le nom abrégé du mois selon les paramètres régionaux.
%B Écrit le nom complet du mois selon les paramètres régionaux.
%m
%Om
Écrit le mois sous forme de nombre décimal (janvier est 01 ). Si le résultat est un seul chiffre, il est préfixé par 0.

La commande modifiée %Om écrit la représentation alternative selon les paramètres régionaux.

Jour
%d
%Od
Écrit le jour du mois sous forme de nombre décimal. Si le résultat est un seul chiffre décimal, il est préfixé par 0.

La commande modifiée %Od écrit la représentation alternative selon les paramètres régionaux.

%e
%Oe
Écrit le jour du mois sous forme de nombre décimal. Si le résultat est un seul chiffre décimal, il est préfixé par un espace.

La commande modifiée %Oe écrit la représentation alternative selon les paramètres régionaux.

Jour de la semaine
%a Écrit le nom abrégé du jour de la semaine selon les paramètres régionaux.
%A Écrit le nom complet du jour de la semaine selon les paramètres régionaux.
%u
%Ou
Écrit le jour de la semaine ISO sous forme de nombre décimal (1-7), où lundi est 1 .

La commande modifiée %Ou écrit la représentation alternative selon les paramètres régionaux.

%w
%Ow
Écrit le jour de la semaine sous forme de nombre décimal (0-6), où dimanche est 0 .

La commande modifiée %Ow écrit la représentation alternative selon les paramètres régionaux.

Année basée sur la semaine ISO 8601

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 Écrit les deux derniers chiffres décimaux de l'année basée sur la semaine ISO 8601. Si le résultat est un seul chiffre, il est préfixé par 0.
%G Écrit l'année basée sur la semaine ISO 8601 sous forme de nombre décimal. Si le résultat compte moins de quatre chiffres, il est complété à gauche par des 0 pour atteindre quatre chiffres.
%V
%OV
Écrit la semaine ISO 8601 de l'année sous forme de nombre décimal. Si le résultat est un seul chiffre, il est préfixé par 0.

La commande modifiée %OV écrit la représentation alternative selon les paramètres régionaux.

Semaine/jour de l'année
%j Écrit le jour de l'année sous forme de nombre décimal (1er janvier est 001 ). Si le résultat compte moins de trois chiffres, il est complété à gauche par des 0 pour atteindre trois chiffres.
%U
%OU
Écrit le numéro de la semaine de l'année sous forme de 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 à cela sont dans la semaine 00. Si le résultat est un seul chiffre, il est préfixé par 0.

La commande modifiée %OU écrit la représentation alternative selon les paramètres régionaux.

%W
%OW
Écrit le numéro de la semaine de l'année sous forme de 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 à cela sont dans la semaine 00. Si le résultat est un seul chiffre, il est préfixé par 0.

La commande modifiée %OW écrit la représentation alternative selon les paramètres régionaux.

Date
%D Équivalent à "%m/%d/%y" .
%F Équivalent à "%Y-%m-%d" .
%x
%Ex
Écrit la représentation de la date selon les paramètres régionaux.

La commande modifiée %Ex produit la représentation alternative de la date selon les paramètres régionaux.

Fuseau horaire
%z
%Ez
%Oz
Écrit le décalage par rapport à UTC au format ISO 8601. Par exemple -0430 correspond à 4 heures 30 minutes derrière UTC. Si le décalage est zéro, +0000 est utilisé.

Les commandes modifiées %Ez et %Oz insèrent un : entre les heures et les minutes (par ex., -04:30 ).

%Z Écrit l'abréviation du fuseau horaire.
Divers
%c
%Ec
Écrit la représentation de la date et de l'heure selon les paramètres régionaux.

La commande modifiée %Ec écrit la représentation alternative de la date et de l'heure selon les paramètres régionaux.

Exemple

#include <chrono>
#include <print>
using namespace std::chrono_literals;
int main()
{
    auto du{3h + 2min + 1s};
    std::print(
        "Duration is:\n"
        "{}\n"
        "{:%T}\n"
        "{:%H:%M:%S}\n"
        "{:%H hours %M minutes %S seconds}\n",
        du, du, du, du);
}

Sortie possible :

Duration is:
10921s
03:02:01
03:02:01
03 hours 02 minutes 01 seconds

Voir aussi

(C++20)
stocke la représentation formatée des arguments dans une nouvelle chaîne
(modèle de fonction)