Namespaces
Variants

std:: formatter <std::chrono::zoned_time> , std:: chrono:: local_time_format

From cppreference.net
Definiert in Header <chrono>
template < class Duration, class TimeZonePtr, class CharT >

struct formatter < std:: chrono :: zoned_time < Duration, TimeZonePtr > , CharT >
: std:: formatter < /*local-time-format-t*/
< std:: common_type_t < Duration,

std:: chrono :: seconds >> , CharT >
(1) (seit C++20)
template < class Duration >

/*local-time-format-t*/ < Duration >
local_time_format ( const std:: chrono :: local_time < Duration > & tp,
const std:: string * abbrev = nullptr,

const std:: chrono :: seconds * offset_sec = nullptr ) ;
(2) (seit C++20)
Hilfsvorlagen
template < class Duration >

struct /*local-time-format-t*/
{
std:: chrono :: local_time < Duration > /*time*/ ;
const std:: string * /*abbrev*/ ;
const std:: chrono :: seconds * /*offset_sec*/ ;

} ;
(3) (seit C++20)
( Nur zur Darstellung* )
template < class Duration, class CharT >
struct formatter < /*local-time-format-t*/ < Duration > , CharT > ;
(4) (seit C++20)
1) Spezialisierung von std::formatter , die Formatierungsregeln für einen std::chrono::zoned_time definiert.
  • Die parse -Memberfunktion wird von der Basisklasse geerbt.
  • Sei tp das Formatierungsargument und ctx der Formatierungskontext, das Verhalten der format -Memberfunktion ist äquivalent zu:

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 ) ;

2) Erzeugt ein Objekt, das als std::chrono::zoned_time formatiert werden kann.
Gibt { time, abbrev, offset_sec } zurück.
3) Ein nur zur Darstellung bestimmter Typ, der alle Informationen zur Formatierung eines std::chrono::zoned_time enthält:
  • abbrev enthält die Zeitzonenabkürzung.
  • offset_sec enthält den UTC-Offset.
  • time enthält alle anderen benötigten Informationen.
4) Spezialisierung von std::formatter , die die zugrundeliegenden Formatierungsregeln für einen std::chrono::zoned_time definiert.
Sei f das Formatierungsargument, die Spezialisierung hat die folgenden zusätzlichen Formatierungsregeln:
  • Wenn chrono-spec ausgelassen wird, ist das Ergebnis äquivalent zur Verwendung von %F %T %Z als chrono-spec .
  • Wenn %Z verwendet wird, wird es ersetzt durch * f. abbrev falls f. abbrev kein Nullzeigerwert ist; andernfalls wird eine Ausnahme vom Typ std::format_error ausgelöst.
  • Wenn %z oder eine modifizierte Variante von %z verwendet wird, wird es ersetzt durch * f. offset_sec falls f. offset_sec kein Nullzeigerwert ist; andernfalls wird eine Ausnahme vom Typ std::format_error ausgelöst.

Die std::formatter Spezialisierung wird normalerweise nicht direkt aufgerufen, sondern wird über Formatierungsfunktionen verwendet.

Inhaltsverzeichnis

Formatspezifikation

Die Formatspezifikation hat die Form

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

fill-and-align , width und precision haben dieselbe Bedeutung wie in der Standard-Formatspezifikation . precision ist nur gültig für std::chrono::duration -Typen, bei denen der Repräsentationstyp Rep ein Gleitkommatyp ist, andernfalls wird std::format_error ausgelöst.

Das für die Formatierung verwendete Locale wird wie folgt bestimmt:

  • die Standard-Lokalisierung "C" falls L nicht in der Formatspezifikation vorhanden ist,
  • andernfalls die durch das std::locale bezeichnete Lokalisierung, falls eine an die Formatierungsfunktion übergeben wurde,
  • andernfalls ( L ist vorhanden, aber kein std::locale wurde an die Formatierungsfunktion übergeben) die globale Lokalisierung.

Wenn die (gewöhnliche oder breite) String-Literal-Kodierung eine Unicode-Kodierungsform ist und das Gebietsschema zu einem implementierungsdefinierten Satz von Gebietsschemata gehört, wird jeder Ersatz, der vom Gebietsschema abhängt, so durchgeführt, als ob die Ersatzzeichenfolge in die Literalkodierung konvertiert würde.

Die chrono-spec besteht aus einem oder mehreren Konvertierungsspezifizierern und gewöhnlichen Zeichen (außer { , } und % ). Eine chrono-spec muss mit einem Konvertierungsspezifizierer beginnen. Alle gewöhnlichen Zeichen werden unverändert in die Ausgabe geschrieben. Jeder unmodifizierte Konvertierungsspezifizierer beginnt mit einem % -Zeichen, gefolgt von einem Zeichen, das das Verhalten des Spezifizierers bestimmt. Einige Konvertierungsspezifizierer haben eine modifizierte Form, bei der ein E - oder O -Modifikatorzeichen nach dem % -Zeichen eingefügt wird. Jeder Konvertierungsspezifizierer wird wie unten beschrieben durch entsprechende Zeichen in der Ausgabe ersetzt.

Sofern nicht anders angegeben, wird das Chrono-Objekt, wenn die chrono-spec leer ist, so formatiert, als würde es durch Streamen in ein Objekt os vom Typ std:: basic_ostringstream < CharT > mit der Formatierungs-Locale (eine von std:: locale :: classic ( ) , dem übergebenen std::locale -Objekt und std:: locale :: global ( ) ) eingestellt und durch Kopieren von os. str ( ) in den Ausgabepuffer mit zusätzlichem Auffüllen und Anpassungen gemäß den Format-Spezifizierern übertragen.

Die folgenden Formatbezeichner sind verfügbar:

Konvertierungsspezifizierer
Erklärung
%% Schreibt ein literales % Zeichen.
%n Schreibt ein Newline-Zeichen.
%t Schreibt ein horizontales Tabulatorzeichen.
Jahr
%C
%EC
Schreibt das Jahr geteilt durch 100 unter Verwendung der Abrundungsdivision. Wenn das Ergebnis eine einzelne Dezimalziffer ist, wird es mit 0 vorangestellt.

Der modifizierte Befehl %EC schreibt die alternative Darstellung des Jahrhunderts gemäß der Locale.

%y
%Oy
%Ey
Schreibt die letzten zwei Dezimalstellen des Jahres. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %Oy schreibt die alternative Darstellung des Gebietsschemas.

Der modifizierte Befehl %Ey schreibt die alternative Darstellung des Gebietsschemas für den Offset von %EC (nur Jahr).

%Y
%EY
Schreibt das Jahr als Dezimalzahl. Wenn das Ergebnis weniger als vier Stellen hat, wird es links mit Nullen auf vier Stellen aufgefüllt.

Der modifizierte Befehl %EY schreibt die lokale alternative Darstellung des vollständigen Jahres.

Monat
%b
%h
Schreibt den abgekürzten Monatsnamen der Lokalisierung.
%B Schreibt den vollständigen Monatsnamen der Lokalisierung.
%m
%Om
Schreibt den Monat als Dezimalzahl (Januar ist 01 ). Wenn das Ergebnis eine einzelne Ziffer ist, wird eine 0 vorangestellt.

Der modifizierte Befehl %Om schreibt die lokalisierte alternative Darstellung.

Tag
%d
%Od
Schreibt den Tag des Monats als Dezimalzahl. Wenn das Ergebnis eine einzelne Dezimalziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %Od schreibt die alternative Darstellung des Gebietsschemas.

%e
%Oe
Schreibt den Tag des Monats als Dezimalzahl. Wenn das Ergebnis eine einzelne Dezimalziffer ist, wird sie mit einem Leerzeichen vorangestellt.

Der modifizierte Befehl %Oe schreibt die alternative Darstellung des Gebietsschemas.

Wochentag
%a Schreibt den abgekürzten Wochentagsnamen der Locale.
%A Schreibt den vollständigen Wochentagsnamen der Lokalisierung.
%u
%Ou
Schreibt den ISO-Wochentag als Dezimalzahl (1-7), wobei Montag 1 ist.

Der modifizierte Befehl %Ou schreibt die lokale alternative Darstellung.

%w
%Ow
Schreibt den Wochentag als Dezimalzahl (0-6), wobei Sonntag 0 ist.

Der modifizierte Befehl %Ow schreibt die alternative Darstellung der Locale.

ISO 8601 wochenbasiertes Jahr

In ISO 8601 beginnen Wochen mit Montag und die erste Woche des Jahres muss die folgenden Anforderungen erfüllen:

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
%g Schreibt die letzten beiden Dezimalstellen des ISO 8601 wochenbasierten Jahres. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.
%G Schreibt das ISO 8601 wochenbasierte Jahr als Dezimalzahl. Wenn das Ergebnis weniger als vier Stellen hat, wird es links mit 0 auf vier Stellen aufgefüllt.
%V
%OV
Schreibt die ISO 8601-Woche des Jahres als Dezimalzahl. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OV schreibt die alternative Darstellung des Gebietsschemas.

Woche/Tag des Jahres
%j Schreibt den Tag des Jahres als Dezimalzahl (1. Januar ist 001 ). Wenn das Ergebnis weniger als drei Stellen hat, wird es links mit Nullen auf drei Stellen aufgefüllt.
%U
%OU
Schreibt die Wochennummer des Jahres als Dezimalzahl. Der erste Sonntag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres, die davor liegen, sind in Woche 00. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OU schreibt die alternative Darstellung des Gebietsschemas.

%W
%OW
Schreibt die Wochennummer des Jahres als Dezimalzahl. Der erste Montag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres davor sind in Woche 00. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OW schreibt die alternative Darstellung des Gebietsschemas.

Datum
%D Entspricht "%m/%d/%y" .
%F Entspricht "%Y-%m-%d" .
%x
%Ex
Schreibt die lokale Datumsdarstellung.

Der modifizierte Befehl %Ex erzeugt die alternative lokale Datumsdarstellung.

Tageszeit
%H
%OH
Schreibt die Stunde (24-Stunden-Format) als Dezimalzahl. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OH schreibt die lokale alternative Darstellung.

%I
%OI
Schreibt die Stunde (12-Stunden-Format) als Dezimalzahl. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OI schreibt die alternative Darstellung des Gebietsschemas.

%M
%OM
Schreibt die Minute als Dezimalzahl. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OM schreibt die lokalisierte alternative Darstellung.

%S
%OS
Schreibt die Sekunde als Dezimalzahl. Wenn die Anzahl der Sekunden kleiner als 10 ist, wird das Ergebnis mit einer 0 vorangestellt.

Falls die Genauigkeit der Eingabe nicht exakt mit Sekunden dargestellt werden kann, dann ist das Format eine Dezimal-Fließkommazahl mit einem festen Format und einer Genauigkeit, die der Genauigkeit der Eingabe entspricht (oder mit Mikrosekunden-Genauigkeit, falls die Umwandlung in Dezimal-Fließkommasekunden nicht innerhalb von 18 Nachkommastellen erfolgen kann). Das Zeichen für den Dezimalpunkt wird entsprechend der Locale lokalisiert.

Der modifizierte Befehl %OS schreibt die alternative Darstellung der Locale.

%p Schreibt die lokalen Entsprechungen der AM/PM-Bezeichnungen, die mit einer 12-Stunden-Uhr assoziiert sind.
%R Entspricht "%H:%M" .
%T Entspricht "%H:%M:%S" .
%r Schreibt die 12-Stunden-Uhrzeit der Lokalisierung.
%X
%EX
Schreibt die Zeitdarstellung des Gebietsschemas.

Der modifizierte Befehl %EX schreibt die alternative Zeitdarstellung des Gebietsschemas.


Zeitzone
%z
%Ez
%Oz
Schreibt den UTC-Offset im ISO 8601-Format. Beispielsweise -0430 bedeutet 4 Stunden 30 Minuten hinter UTC. Wenn der Offset null ist, wird +0000 verwendet.

Die modifizierten Befehle %Ez und %Oz fügen einen Doppelpunkt : zwischen Stunden und Minuten ein (z.B. -04:30 ).

%Z Schreibt die Zeitzonenabkürzung.
Sonstiges
%c
%Ec
Schreibt die lokale Datums- und Zeitdarstellung.

Der modifizierte Befehl %Ec schreibt die alternative lokale Datums- und Zeitdarstellung.

Die folgenden Spezifizierer werden erkannt, führen jedoch dazu, dass std::format_error ausgelöst wird:

Konvertierungsspezifizierer
Erklärung
Dauer-Zählung
%Q Schreibt die Anzahl der Ticks der Dauer, d.h. den Wert erhalten via count() .
%q Schreibt das Einheitensuffix der Dauer, wie spezifiziert in operator<<() .

Beispiel

Fehlerberichte

Die folgenden verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.

DR Angewendet auf Verhalten wie veröffentlicht Korrektes Verhalten
LWG 4124 C++20 1. chrono-spec konnte nicht weggelassen werden
2. zoned_time konnte nicht formatiert werden
mit gröberer Auflösung als Sekunden
1. es kann weggelassen werden
2. kann mit diesen Auflösungen
formatiert werden
P2372R3 C++20 formatter verwendete die globale Locale oder übergebene Locale Standard- "C" Locale wird verwendet wenn L fehlt

Siehe auch

(C++20)
speichert die formatierte Darstellung der Argumente in einer neuen Zeichenkette
(Funktionsschablone)