Namespaces
Variants

std:: formatter <std::chrono::hh_mm_ss>

From cppreference.net
Definiert im Header <chrono>
template < class CharT >
struct formatter < std:: chrono :: hh_mm_ss , CharT > ;
(seit C++20)

Spezialisierung von std::formatter , die Formatierungsregeln für einen std::chrono::hh_mm_ss definiert.

Die std::formatter Spezialisierung wird normalerweise nicht direkt aufgerufen, sondern ü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-Format-Spezifikation . 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 Gebietsschema wird wie folgt bestimmt:

  • die Standard-Lokalisierung "C" falls L nicht in der Formatangabe 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 ersetzende Vorgang, 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 ob es durch Streaming in ein Objekt os vom Typ std:: basic_ostringstream < CharT > mit der Formatierungs-Locale (entweder std:: locale :: classic ( ) , das übergebene std::locale -Objekt oder std:: locale :: global ( ) ) imbuiert und durch Kopieren von os. str ( ) in den Ausgabepuffer mit zusätzlichem Padding und Anpassungen gemäß den Format-Spezifizierern ausgegeben würde.

Die folgenden Formatbezeichner sind verfügbar:

Konvertierungsspezifizierer Erklärung
%% Schreibt ein Literalzeichen % .
%n Schreibt ein Zeilenumbruchzeichen.
%t Schreibt ein horizontales Tabulatorzeichen.
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 lokale alternative Darstellung.

%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 lokale alternative Darstellung.

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

Wenn die Genauigkeit der Eingabe nicht exakt mit Sekunden dargestellt werden kann, dann ist das Format eine Dezimal-Gleitkommazahl mit einem festen Format und einer Genauigkeit, die der Genauigkeit der Eingabe entspricht (oder einer Mikrosekunden-Genauigkeit, falls die Konvertierung in Dezimalsekunden nicht innerhalb von 18 Nachkommastellen erfolgen kann). Das Zeichen für den Dezimalpunkt wird entsprechend der Lokalisierung angepasst.

Der modifizierte Befehl %OS schreibt die lokale alternative Darstellung.

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

Der modifizierte Befehl %EX schreibt die alternative lokale Zeitdarstellung.

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

Umwandlungs-
spezifizierer
Erklärung
Jahr
%C
%EC
Schreibt das Jahr geteilt durch 100 mittels Abrundungsdivision. Wenn das Ergebnis eine einzelne Dezimalziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %EC schreibt die lokale alternative Darstellung des Jahrhunderts.

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

Der modifizierte Befehl %Oy schreibt die lokale alternative Darstellung.

Der modifizierte Befehl %Ey schreibt die lokale alternative Darstellung des Offsets von %EC (nur Jahr).

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

Der modifizierte Befehl %EY schreibt die lokale alternative Volljahrdarstellung.

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

Der modifizierte Befehl %Om schreibt die lokale 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 lokale alternative Darstellung.

%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 lokale alternative Darstellung.

Wochentag
%a Schreibt den lokalen abgekürzten Wochentagsnamen.
%A Schreibt den lokalen vollständigen Wochentagsnamen.
%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 lokale alternative Darstellung.

ISO 8601 wochenbasiertes Jahr

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

  • Beinhaltet den 4. Januar
  • Beinhaltet den ersten Donnerstag des Jahres
%g Schreibt die letzten zwei Dezimalziffern 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 Ziffern hat, wird es links mit 0 auf vier Ziffern aufgefüllt.
%V
%OV
Schreibt die ISO 8601 Wochennummer des Jahres als Dezimalzahl. Wenn das Ergebnis eine einzelne Ziffer ist, wird sie mit 0 vorangestellt.

Der modifizierte Befehl %OV schreibt die lokale alternative Darstellung.

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 links mit 0 auf drei Ziffern aufgefüllt.
%U
%OU
Schreibt die Wochennummer des Jahres als Dezimalzahl. Der erste Sonntag des Jahres ist der erste Tag von 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 %OU schreibt die lokale alternative Darstellung.

%W
%OW
Schreibt die Wochennummer des Jahres als Dezimalzahl. Der erste Montag des Jahres ist der erste Tag von 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 lokale alternative Darstellung.

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

Der modifizierte Befehl %Ex erzeugt die lokale alternative Datumsdarstellung.

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<<() .
Zeitzone
%z
%Ez
%Oz
Schreibt den Offset von UTC im ISO 8601 Format. Zum Beispiel -0430 bezieht sich auf 4 Stunden 30 Minuten hinter UTC. Wenn der Offset null ist, wird +0000 verwendet.

Die modifizierten Befehle %Ez und %Oz fügen einen : 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 lokale alternative Datums- und Zeitdarstellung.

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

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