std::formatter<std::chrono::duration>
| Definiert in Header <chrono> |
||
| template< class Rep, class Period, class CharT > struct formatter<std::chrono::duration<Rep, Period>, CharT>; |
||
Spezialisierung von std::formatter, die Formatierungsregeln für eine std::chrono::duration definiert. Die duration wird als Tageszeit seit Mitternacht interpretiert.
Die std::formatter-Spezialisierung wird normalerweise nicht direkt aufgerufen, sondern über Formatierungsfunktionen verwendet.
[bearbeiten] Formatangabe
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 so formatiert, als ob es mit Streamen in ein Objekt os vom Typ std::basic_ostringstream<CharT> formatiert würde, wobei das Formatierungsgebietsschema (eines von std::locale::classic(), das übergebene std::locale-Objekt und std::locale::global()) imbued wurde und os.str() mit zusätzlicher Auffüllung und Anpassungen gemäß den Formatangaben in den Ausgabepuffer kopiert wird.
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 | |
| 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. | |
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 | |
| 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 <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); }
Mögliche Ausgabe
Duration is: 10921s 03:02:01 03:02:01 03 hours 02 minutes 01 seconds
[bearbeiten] Siehe auch
| (C++20) |
speichert die formatierte Darstellung der Argumente in einem neuen String (Funktionstemplate) |