std::formatter<std::chrono::hh_mm_ss>
| Definiert in Header <chrono> |
||
| template< class CharT > struct formatter<std::chrono::hh_mm_ss, CharT>; |
(seit C++20) | |
Spezialisierung von std::formatter, die Formatierungsregeln für eine std::chrono::hh_mm_ss definiert.
Die std::formatter-Spezialisierung wird normalerweise nicht direkt aufgerufen, sondern über Formatierungsfunktionen verwendet.
Inhalt |
[bearbeiten] Formatierungsangabe
Die Formatangabe hat die Form
fill-and-align (optional) width (optional) precision (optional) L(optional) chrono-spec (optional) |
|||||||||
fill-and-align, width und precision haben die gleiche Bedeutung wie in der Standardformatangabe. precision ist nur für std::chrono::duration-Typen gültig, deren Repräsentationstyp Rep ein Gleitkommatyp ist, andernfalls wird std::format_error ausgelöst.
Das zur Formatierung verwendete Gebietsschema wird wie folgt bestimmt
- das Standard-
"C"-Gebietsschema, wennLnicht in der Formatangabe enthalten ist, - andernfalls das Gebietsschema, das durch das an die Formatierungsfunktion übergebene std::locale bezeichnet wird, falls vorhanden,
- andernfalls (
List vorhanden, aber keine std::locale wird an die Formatierungsfunktion übergeben), das globale Gebietsschema.
Wenn die Kodierung des (gewöhnlichen oder breiten) Zeichenkettenliterals eine Unicode-Kodierungsform ist und das Gebietsschema zu einer implementierungsdefinierten Menge von Gebietsschemata gehört, werden jede Ersetzung, die vom Gebietsschema abhängt, so durchgeführt, als ob die Ersetzungszeichenfolge in die Literal-Kodierung 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 unveränderte Konvertierungsspezifizierer beginnt mit einem %-Zeichen, gefolgt von einem Zeichen, das das Verhalten des Spezifizierers bestimmt. Einige Konvertierungsspezifizierer haben eine modifizierte Form, bei der nach dem %-Zeichen ein E- oder O-Modifikatorzeichen eingefügt wird. Jeder Konvertierungsspezifizierer wird durch die unten beschriebenen entsprechenden Zeichen in der Ausgabe ersetzt.
Sofern nicht anders angegeben, wird, wenn die chrono-spec leer ist, das Chrono-Objekt formatiert, als ob es mit gestreamt auf ein Objekt os vom Typ std::basic_ostringstream<CharT> formatiert wäre, das mit der Formatierungs-Locale (eine von std::locale::classic(), dem übergebenen std::locale-Objekt und std::locale::global()) imbuiert wurde und das Kopieren von os.str() in den Ausgabepuffer mit zusätzlicher Auffüllung und Anpassungen gemäß den Formatierungsangaben.
Die folgenden Format-Spezifizierer sind verfügbar:
| Konversion Spezifizierer |
Erklärung | |
|---|---|---|
%%
|
Schreibt ein literales %-Zeichen. | |
%n
|
Schreibt ein Zeilenumbruchzeichen. | |
%t
|
Schreibt ein horizontalen Tabulator. | |
| Tageszeit | ||
%H%OH
|
Schreibt die Stunde (24-Stunden-Format) als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%I%OI
|
Schreibt die Stunde (12-Stunden-Format) als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%M%OM
|
Schreibt die Minute als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%S%OS
|
Schreibt die Sekunde als Dezimalzahl. Wenn die Anzahl der Sekunden kleiner als 10 ist, wird das Ergebnis mit 0 vorangestellt. Wenn die Präzision der Eingabe nicht exakt mit Sekunden dargestellt werden kann, ist das Format eine Dezimalzahl mit Festkommaformat und einer Präzision, die der Präzision der Eingabe entspricht (oder einer Mikrosekundenpräzision, wenn die Konvertierung in Dezimalsekunden mit Gleitkommazahl nicht innerhalb von 18 Nachkommastellen erfolgen kann). Das Dezimaltrennzeichen wird gemäß dem Gebietsschema lokalisiert. Der modifizierte Befehl | |
%p
|
Schreibt die Bezeichnung für AM/PM des Gebietsschemas für eine 12-Stunden-Uhr. | |
%R
|
Entspricht "%H:%M". | |
%T
|
Entspricht "%H:%M:%S". | |
%r
|
Schreibt die 12-Stunden-Uhrzeit des Gebietsschemas. | |
%X%EX
|
Schreibt die Zeitdarstellung des Gebietsschemas. Der modifizierte Befehl | |
Die folgenden Spezifizierer werden erkannt, führen aber zu einem std::format_error-Fehler
| Konversion Spezifizierer |
Erklärung | |
|---|---|---|
| Jahr | ||
%C %EC
|
Schreibt das Jahr geteilt durch 100 mittels abgerundeter Division. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%y %Oy %Ey
|
Schreibt die letzten beiden Dezimalziffern des Jahres. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl Der modifizierte Befehl | |
%Y %EY
|
Schreibt das Jahr als Dezimalzahl. Wenn das Ergebnis weniger als vier Ziffern hat, wird es mit Nullen auf vier Ziffern aufgefüllt. Der modifizierte Befehl | |
| Monat | ||
%b%h
|
Schreibt den abgekürzten Monatsnamen des Gebietsschemas. | |
%B
|
Schreibt den vollständigen Monatsnamen des Gebietsschemas. | |
%m%Om
|
Schreibt den Monat als Dezimalzahl (Januar ist 01). Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt.Der modifizierte Befehl | |
| Tag | ||
%d%Od
|
Schreibt den Tag des Monats als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%e%Oe
|
Schreibt den Tag des Monats als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit einem Leerzeichen vorangestellt. Der modifizierte Befehl | |
| Wochentag | ||
%a
|
Schreibt den abgekürzten Wochentagsnamen des Gebietsschemas. | |
%A
|
Schreibt den vollständigen Wochentagsnamen des Gebietsschemas. | |
%u%Ou
|
Schreibt den ISO-Wochentag als Dezimalzahl (1-7), wobei Montag 1 ist.Der modifizierte Befehl | |
%w%Ow
|
Schreibt den Wochentag als Dezimalzahl (0-6), wobei Sonntag 0 ist.Der modifizierte Befehl | |
| ISO 8601 wochenbasierendes Jahr | ||
|
In ISO 8601 beginnen Wochen mit Montag, und die erste Woche des Jahres muss die folgenden Anforderungen erfüllen:
| ||
%g
|
Schreibt die letzten beiden Dezimalziffern des ISO 8601 wochenbasierten Jahres. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. | |
%G
|
Schreibt das ISO 8601 wochenbasierte Jahr als Dezimalzahl. Wenn das Ergebnis weniger als vier Ziffern hat, wird es mit Nullen auf vier Ziffern aufgefüllt. | |
%V%OV
|
Schreibt die ISO 8601 Kalenderwoche des Jahres als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
| Woche/Tag des Jahres | ||
%j
|
Schreibt den Tag des Jahres als Dezimalzahl (1. Januar ist 001). Wenn das Ergebnis weniger als drei Ziffern hat, wird es mit Nullen auf drei Ziffern aufgefüllt. | |
%U%OU
|
Schreibt die Kalenderwoche als Dezimalzahl. Der erste Sonntag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres davor gehören zur Woche 00. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
%W%OW
|
Schreibt die Kalenderwoche als Dezimalzahl. Der erste Montag des Jahres ist der erste Tag der Woche 01. Tage desselben Jahres davor gehören zur Woche 00. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt. Der modifizierte Befehl | |
| Datum | ||
%D
|
Entspricht "%m/%d/%y". | |
%F
|
Entspricht "%Y-%m-%d". | |
%x%Ex
|
Schreibt die Datumsdarstellung des Gebietsschemas. Der modifizierte Befehl | |
| Anzahl der Ticks der Dauer | ||
%Q
|
Schreibt die Anzahl der Ticks der Dauer, d.h. den Wert, der über count() erhalten wird. | |
%q
|
Schreibt das Einheitensuffix der Dauer, wie in operator<<() angegeben. | |
| Zeitzone | ||
%z%Ez%Oz
|
Schreibt den Offset von UTC im ISO 8601-Format. Zum Beispiel bezieht sich -0430 auf 4 Stunden und 30 Minuten hinter UTC. Wenn der Offset null ist, wird +0000 verwendet.Die modifizierten Befehle | |
%Z
|
Schreibt die Zeitzonenabkürzung. | |
| Sonstiges | ||
%c%Ec
|
Schreibt die Datums- und Zeitdarstellung des Gebietsschemas. Der modifizierte Befehl | |
[bearbeiten] Beispiel
#include <chrono> #include <format> #include <iostream> using namespace std::literals; int main() { std::chrono::hh_mm_ss c{16h + 32min + 10s}; std::cout << "%R: " << std::format("{:%R}", c) << '\n' << "%T: " << std::format("{:%T}", c) << '\n'; }
Ausgabe
%R: 16:32 %T: 16:32:10
[bearbeiten] Fehlerberichte
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| P2372R3 | C++20 | formatter verwendete das globale Locale oder ein übergebenes Locale |
Standard-"C"-Locale wird verwendet, wenn L fehlt |
[bearbeiten] Siehe auch
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |