std:: formatter <std::chrono::zoned_time> , std:: chrono:: local_time_format
|
Défini dans l'en-tête
<chrono>
|
||
|
template
<
class
Duration,
class
TimeZonePtr,
class
CharT
>
struct
formatter
<
std::
chrono
::
zoned_time
<
Duration, TimeZonePtr
>
, CharT
>
|
(1) | (depuis C++20) |
|
template
<
class
Duration
>
/*local-time-format-t*/
<
Duration
>
|
(2) | (depuis C++20) |
|
Modèles auxiliaires
|
||
|
template
<
class
Duration
>
struct
/*local-time-format-t*/
|
(3) |
(depuis C++20)
( exposition uniquement* ) |
|
template
<
class
Duration,
class
CharT
>
struct formatter < /*local-time-format-t*/ < Duration > , CharT > ; |
(4) | (depuis C++20) |
-
La fonction membre
parseest héritée de la classe de base. -
Soit
tp
l'argument de formatage et
ctx
le contexte de formatage, le comportement de la fonction membre
formatest équivalent à :
using
common_duration_type
=
std::
common_type_t
<
Duration,
std::
chrono
::
seconds
>
;
using
formatter_type
=
std::
formatter
<
local-time-format-t
<
common_duration_type
>
;
std::
chrono
::
sys_info
info
=
tp.
get_info
(
)
;
return
formatter_type
::
format
(
{
tp.
get_local_time
(
)
,
&
info.
abbrev
,
&
info.
offset_sec
}
)
, ctx
)
;
-
abbrevcontient l'abréviation du fuseau horaire. -
offset_seccontient le décalage par rapport à UTC. -
timecontient toutes les autres informations nécessaires.
-
Si
chrono-spec
est omis, le résultat est équivalent à l'utilisation de
%F %T %Zcomme chrono-spec . -
Si
%Zest utilisé, il est remplacé par * f. abbrev si f. abbrev n'est pas une valeur de pointeur nul ; sinon une exception de type std::format_error est levée. -
Si
%zou une variante modifiée de%zest utilisé, il est remplacé par * f. offset_sec si f. offset_sec n'est pas une valeur de pointeur nul ; sinon une exception de type std::format_error est levée.
La spécialisation std::formatter n'est généralement pas accédée directement, mais est utilisée via les fonctions de formatage .
Table des matières |
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
Ln'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 (
Lest présent mais aucun std::locale n'est passé à la fonction de formatage), la locale globale.
Si l' encodage de littéral 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
spécification chrono
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 (soit
std::
locale
::
classic
(
)
, l'objet
std::locale
passé, ou
std::
locale
::
global
(
)
)
appliqués
, puis en copiant
os.
str
(
)
dans le tampon de sortie avec remplissage supplémentaire et ajustements 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. | |
| Année | ||
%C
%EC
|
Écrit l'année divisée par 100 en utilisant une division tronquée. Si le résultat est un chiffre décimal unique, il est préfixé par 0.
La commande modifiée
|
|
%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écédé d'un 0.
La commande modifiée
La commande modifiée
|
|
%Y
%EY
|
Écrit l'année sous forme de nombre décimal. Si le résultat comporte moins de quatre chiffres, il est complété à gauche par des 0 pour atteindre quatre chiffres.
La commande modifiée
|
|
| Mois | ||
%b
%h
|
Écrit le nom abrégé du mois selon les paramètres régionaux. | |
%B
|
Écrit le nom complet du mois dans la locale. | |
%m
%Om
|
Écrit le mois sous forme de nombre décimal (janvier est
01
). Si le résultat est un chiffre unique, il est préfixé par 0.
La commande modifiée
|
|
| 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
|
|
%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écédé d'un espace.
La commande modifiée
|
|
| 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 correspond à
1
.
La commande modifiée
|
|
%w
%Ow
|
Écrit le jour de la semaine sous forme de nombre décimal (0-6), où dimanche est
0
.
La commande modifiée
|
|
| 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 :
|
||
%g
|
Écrit les deux derniers chiffres décimaux de l'année ISO 8601 basée sur les semaines. Si le résultat est un seul chiffre, il est précédé d'un 0. | |
%G
|
Écrit l'année basée sur la semaine ISO 8601 sous forme de nombre décimal. Si le résultat comporte 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 chiffre unique, il est précédé d'un 0.
La commande modifiée
|
|
| Semaine/jour de l'année | ||
%j
|
Écrit le jour de l'année sous forme de nombre décimal (le 1er janvier est
001
). Si le résultat compte moins de trois chiffres, il est complété à gauche par des 0 pour obtenir 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 chiffre unique, il est préfixé par 0.
La commande modifiée
|
|
%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 à cette date sont dans la semaine 00. Si le résultat est un chiffre unique, il est préfixé par 0.
La commande modifiée
|
|
| 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
|
|
| 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écédé d'un 0.
La commande modifiée
|
|
%I
%OI
|
Écrit l'heure (format 12 heures) sous forme de nombre décimal. Si le résultat est un chiffre unique, il est précédé d'un 0.
La commande modifiée
|
|
%M
%OM
|
Écrit la minute sous forme de nombre décimal. Si le résultat est un chiffre unique, il est précédé d'un 0.
La commande modifiée
|
|
%S
%OS
|
Écrit la seconde 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 représentée exactement avec des 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 avec une précision en microsecondes si la conversion en secondes décimales à virgule flottante ne peut pas être effectuée avec 18 chiffres fractionnaires). Le caractère pour le point décimal est localisé selon les paramètres régionaux.
La commande modifiée
|
|
%p
|
Écrit 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
|
Écrit l'heure au format 12 heures de la locale. | |
%X
%EX
|
Écrit la représentation horaire de la locale.
La commande modifiée
|
|
| Fuseau horaire | ||
%z
%Ez
%Oz
|
Écrit le décalage horaire par rapport à UTC au format ISO 8601. Par exemple
-0430
correspond à 4 heures 30 minutes derrière UTC. Si le décalage est nul,
+0000
est utilisé.
Les commandes modifiées
|
|
%Z
|
Écrit l'abréviation du fuseau horaire. | |
| Divers | ||
%c
%Ec
|
Écrit la représentation de la date et de l'heure de la locale.
La commande modifiée
|
|
Les spécificateurs suivants sont reconnus, mais entraîneront std::format_error à être levé :
|
Spécificateur de
conversion |
Explication | |
|---|---|---|
| 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<<() . | |
Exemple
|
Cette section est incomplète
Raison : aucun exemple |
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 4124 | C++20 |
1.
chrono-spec
ne pouvait pas être omis
2.
zoned_time
ne pouvait pas être formaté
avec une résolution plus grossière que les secondes |
1. il peut être omis
2. peut être formaté avec ces résolutions |
| P2372R3 | C++20 |
formatter
utilisait la locale globale ou la locale transmise
|
la locale par défaut
"C"
est utilisée lorsque
L
est absent
|
Voir aussi
|
(C++20)
|
stocke la représentation formatée des arguments dans une nouvelle chaîne
(modèle de fonction) |