Namensräume
Varianten
Aktionen

std::formatter<std::chrono::tai_time>

Von cppreference.com
< cpp‎ | chrono‎ | tai clock
 
 
 
std::chrono::tai_clock
Memberfunktionen
Zeitpunkt-I/O
formatter<std::chrono::tai_time>
 
Definiert in Header <chrono>
template< class Duration, class CharT >
struct formatter<std::chrono::tai_time<Duration>, CharT>;
(seit C++20)

Spezialisierung von std::formatter, die Formatierungsregeln für ein std::chrono::tai_time definiert.

  • Wenn %Z verwendet wird, wird es durch CharT erweiterte "TAI" ersetzt.
  • Wenn %z oder eine abgewandelte Variante davon verwendet wird, wird ein Offset von 0min formatiert.
  • Das formatierte Datum und die Uhrzeit entsprechen denen, die für ein std::chrono::sys_time formatiert werden, das mit std::chrono::sys_time<Duration>(tp.time_since_epoch()) - std::chrono::days(4383) initialisiert wurde.

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

Inhalt

[bearbeiten] Format-Spezifikation

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, wenn L nicht in der Formatangabe enthalten ist,
  • andernfalls das Gebietsschema, das durch das an die Formatierungsfunktion übergebene std::locale bezeichnet wird, falls vorhanden,
  • andernfalls (L ist 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 an ein Objekt os vom Typ std::basic_ostringstream<CharT> gestreamt würde, wobei das Formatierungslokale (eines von std::locale::classic(), dem übergebenen std::locale-Objekt und std::locale::global()) imbuiert wird, und os.str() mit zusätzlicher Auffüllung und Anpassungen gemäß den Formatierungsangaben 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.
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 %EC schreibt die alternative Darstellung des Jahrhunderts des Gebietsschemas.

%y
%Oy
%Ey
Schreibt die letzten beiden Dezimalziffern des Jahres. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt.

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

Der modifizierte Befehl %Ey schreibt die alternative Darstellung des Offsets vom %EC (nur das Jahr) des Gebietsschemas.

%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 %EY schreibt die alternative vollständige Jahresdarstellung des Gebietsschemas.

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 %Om schreibt die alternative Darstellung des Gebietsschemas.

Tag
%d
%Od
Schreibt den Tag des Monats als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es 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 einstellig ist, wird es mit einem Leerzeichen vorangestellt.

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

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 %Ou schreibt die alternative Darstellung des Gebietsschemas.

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

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

ISO 8601 wochenbasierendes 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 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 %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 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 %OU schreibt die alternative Darstellung des Gebietsschemas.

%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 %OW schreibt die alternative Darstellung des Gebietsschemas.

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

Der modifizierte Befehl %Ex erzeugt die alternative Datumsdarstellung des Gebietsschemas.

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

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

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

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

%M
%OM
Schreibt die Minute als Dezimalzahl. Wenn das Ergebnis einstellig ist, wird es mit 0 vorangestellt.

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

%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 %OS schreibt die alternative Darstellung des Gebietsschemas.

%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 %EX schreibt die alternative Zeitdarstellung des Gebietsschemas.


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 %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 Datums- und Zeitdarstellung des Gebietsschemas.

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

Die folgenden Spezifizierer werden erkannt, führen aber zu einem std::format_error-Fehler

Konversion
Spezifizierer
Erklärung
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.

[bearbeiten] Beispiel

#include <chrono>
#include <format>
#include <iostream>
 
int main()
{
    std::chrono::time_point<std::chrono::utc_clock> epoch;
 
    std::cout << std::format("The time of the Unix epoch was {0:%F}T{0:%R%z}.", epoch)
              << '\n';
}

Ausgabe

The time of the Unix epoch was 1970-01-01T00:00+0000.

[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) [bearbeiten]