Namespaces
Variants

std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put

From cppreference.net
std::time_put
Member functions
time_put::put time_put::do_put
Definiert im Header <locale>
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

const CharT * fmtbeg, const CharT * fmtend ) const ;
(1)
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier = 0 ) const ;
(2)
protected :

virtual iter_type do_put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier ) const ;
(3)

Wandelt das im std::tm -Objekt gespeicherte Kalenderdatum und -zeit, auf das t zeigt, gemäß der Formatzeichenkette [fmtbeg, fmtend) in eine Zeichenkette um. Die Formatzeichenkette ist dieselbe wie bei std:: strftime verwendet, aber jeder Formatbezeichner wird durch einen einzelnen Aufruf von do_put() verarbeitet, der durch Erweiterung dieser Facette angepasst werden kann.

1) Durchläuft die Zeichensequenz [fmtbeg, fmtend) und untersucht die Zeichen. Jedes Zeichen, das nicht Teil einer Formatsequenz ist, wird sofort an den Ausgabeiterator out geschrieben. Um Formatsequenzen zu identifizieren, verengt diese Funktion das nächste Zeichen c in [fmtbeg, fmtend) wie durch std:: ctype < char_type > ( str. getloc ( ) ) . narrow ( c, 0 ) und wenn es gleich '%' ist, werden die nächsten ein oder zwei Zeichen mit der Liste der von std::strftime erkannten Formatsequenzen sowie allen zusätzlichen implementierungsdefinierten Formaten verglichen, die von dieser Locale unterstützt werden. Für jede gültige Formatsequenz wird ein Aufruf von do_put ( out, str, fill, t, format, modifier ) durchgeführt, wobei format das Formatsequenzzeichen und modifier der optionale Formatsequenzmodifikator ist ( 'E' oder 'O' ). Ein Wert von ' \0 ' wird verwendet, wenn der Modifikator nicht vorhanden ist.
2) Ruft die do_put Memberfunktion der am stärksten abgeleiteten Klasse auf.
3) Wandelt das im std::tm -Objekt gespeicherte Kalenderdatum und die Uhrzeit in eine Zeichenkette um, gemäß der Formatkonvertierungssequenz, die durch Verkettung von '%' , dem Wert von modifier (falls nicht ' \0 ' ) und dem Wert von format gebildet wird. Das Format wird auf die gleiche Weise interpretiert wie die Funktion std::strftime , mit der Ausnahme, dass die als gebietsschemaabhängig beschriebenen Formate durch dieses Gebietsschema definiert werden und zusätzliche Formatspezifizierer unterstützt werden können (das fill -Argument wird für diese implementierungsdefinierten Formatspezifizierer bereitgestellt). Die Zeichenkette wird in den Ausgabeiterator out geschrieben.

Inhaltsverzeichnis

Parameter

out - Ausgabeiterator, in den das Ergebnis der Konvertierung geschrieben wird
str - ein Stream-Objekt, das diese Funktion zur Abfrage von Locale-Facets verwendet, z.B. std::ctype zur Verengung von Zeichen
t - Zeiger auf das std::tm Objekt, aus dem die Datums-/Zeitwerte entnommen werden
fmtbeg - Zeiger auf das erste Zeichen einer Sequenz von char_type Zeichen, die das Konvertierungsformat spezifizieren
fmtend - Zeiger auf das Zeichen nach dem letzten Zeichen einer Sequenz von char_type Zeichen, die das Konvertierungsformat spezifizieren
fill - Füllzeichen (üblicherweise Leerzeichen)
format - das Zeichen, das einen Konvertierungsspezifizierer benennt
modifier - der optionale Modifikator, der zwischen % und dem Konvertierungsspezifizierer erscheinen kann

Formatzeichenkette

Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern und gewöhnlichen Zeichen (außer % ). Alle gewöhnlichen Zeichen, einschließlich des abschließenden Nullzeichens, werden unverändert in die Ausgabezeichenfolge kopiert. Jede Konvertierungsspezifikation beginnt mit dem % -Zeichen, optional gefolgt von einem E - oder O -Modifikator (wird ignoriert, wenn von der Locale nicht unterstützt), gefolgt von dem Zeichen, das das Verhalten der Spezifizierung bestimmt. Die folgenden Formatspezifizierer sind verfügbar:

Konvertierungsspezifizierer
Erklärung Verwendete Felder
% schreibt das Zeichen % . Die vollständige Konvertierungsspezifikation muss %% lauten.
n
(C++11)
schreibt Newline-Zeichen
t
(C++11)
schreibt horizontales Tabulatorzeichen
Jahr
Y schreibt das Jahr als Dezimalzahl, z.B. 2017 tm_year
EY
(C++11)
schreibt das Jahr in alternativer Darstellung, z.B. 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Locale tm_year
y schreibt die letzten 2 Ziffern des Jahres als Dezimalzahl (Bereich [00,99] ) tm_year
Oy
(C++11)
schreibt die letzten 2 Ziffern des Jahres unter Verwendung des alternativen Zahlensystems, z.B. 十一 statt 11 im ja_JP-Locale tm_year
Ey
(C++11)
schreibt das Jahr als Offset vom alternativen Kalenderzeitraum des Gebietsschemas %EC (gebietsschemaabhängig) tm_year
C
(C++11)
schreibt die ersten 2 Ziffern des Jahres als Dezimalzahl (Bereich [00,99] ) tm_year
EC
(C++11)
schreibt den Namen des Basisjahres (Zeitraums) in der alternativen Darstellung des Gebietsschemas, z.B. 平成 (Heisei-Ära) in ja_JP tm_year
G
(C++11)
schreibt das ISO 8601 wochenbasierte Jahr , d.h. das Jahr, das die angegebene Woche enthält.

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

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
tm_year , tm_wday , tm_yday
g
(C++11)
schreibt die letzten 2 Ziffern des ISO 8601 wochenbasierten Jahres , d.h. des Jahres, das die angegebene Woche enthält (Bereich [00,99] ).

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

  • Enthält den 4. Januar
  • Enthält den ersten Donnerstag des Jahres
tm_year , tm_wday , tm_yday
Monat
b schreibt abgekürzten Monatsnamen , z.B. Oct (lokalabhängig) tm_mon
h
(C++11)
Synonym für b tm_mon
B schreibt den vollständigen Monatsnamen , z.B. October (lokalisierungsabhängig) tm_mon
m schreibt den Monat als Dezimalzahl (Bereich [01,12] ) tm_mon
Om
(C++11)
schreibt den Monat unter Verwendung des alternativen numerischen Systems, z.B. 十二 statt 12 in ja_JP-Lokalisierung tm_mon
Woche
U schreibt die Kalenderwoche als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich [00,53] ) tm_year , tm_wday , tm_yday
OU
(C++11)
schreibt Kalenderwoche des Jahres , wie durch %U , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
W schreibt die Kalenderwoche als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich [00,53] ) tm_year , tm_wday , tm_yday
OW
(C++11)
schreibt die Kalenderwoche , wie durch %W , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
V
(C++11)
schreibt die ISO 8601-Woche des Jahres (Bereich [01,53] ).

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
tm_year , tm_wday , tm_yday
OV
(C++11)
schreibt die Kalenderwoche , wie durch %V , unter Verwendung des alternativen Zahlensystems, z.B. 五十二 statt 52 im ja_JP-Locale tm_year , tm_wday , tm_yday
Tag des Jahres/Monats
j schreibt den Tag des Jahres als Dezimalzahl (Bereich [001,366] ) tm_yday
d schreibt den Tag des Monats als Dezimalzahl (Bereich [01,31] ) tm_mday
Od
(C++11)
Schreibt den nullbasierten Tag des Monats unter Verwendung des alternativen Zahlensystems, z.B. 二十七 statt 27 im ja_JP-Locale

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

tm_mday
e
(C++11)
schreibt den Tag des Monats als Dezimalzahl (Bereich [1,31] ).

Einzelne Ziffern werden mit einem Leerzeichen vorangestellt.

tm_mday
Oe
(C++11)
schreibt den Tag des Monats in einbasierter Zählung unter Verwendung des alternativen Zahlensystems, z.B. 二十七 statt 27 im ja_JP-Locale

Einzelnen Zeichen wird ein Leerzeichen vorangestellt.

tm_mday
Wochentag
a schreibt den abgekürzten Wochentagsnamen , z.B. Fri (lokalabhängig) tm_wday
A schreibt den vollständigen Wochentagsnamen , z.B. Friday (lokalisierungsabhängig) tm_wday
w schreibt den Wochentag als Dezimalzahl, wobei Sonntag 0 ist (Bereich [0-6] ) tm_wday
Ow
(C++11)
schreibt den Wochentag , wobei Sonntag als 0 dargestellt wird, unter Verwendung des alternativen Zahlensystems, z.B. 二 statt 2 im ja_JP-Locale tm_wday
u
(C++11)
schreibt den Wochentag als Dezimalzahl, wobei Montag 1 ist (ISO 8601 Format) (Bereich [1-7] ) tm_wday
Ou
(C++11)
schreibt den Wochentag , wobei Montag als 1 dargestellt wird, unter Verwendung des alternativen Zahlensystems, z.B. 二 statt 2 im ja_JP-Locale tm_wday
Stunde, Minute, Sekunde
H schreibt die Stunde als Dezimalzahl, 24-Stunden-Format (Bereich [00-23] ) tm_hour
OH
(C++11)
schreibt die Stunde aus dem 24-Stunden-Format unter Verwendung des alternativen Zahlensystems, z.B. 十八 statt 18 im ja_JP-Locale tm_hour
I schreibt hour als Dezimalzahl, 12-Stunden-Zeitformat (Bereich [01,12] ) tm_hour
OI
(C++11)
schreibt Stunde aus der 12-Stunden-Uhr unter Verwendung des alternativen Zahlensystems, z.B. 六 statt 06 im ja_JP-Locale tm_hour
M schreibt die Minute als Dezimalzahl (Bereich [00,59] ) tm_min
OM
(C++11)
schreibt die Minute unter Verwendung des alternativen Zahlensystems, z.B. 二十五 statt 25 im ja_JP-Locale tm_min
S schreibt die Sekunde als Dezimalzahl (Bereich [00,60] ) tm_sec
OS
(C++11)
schreibt die Sekunde unter Verwendung des alternativen Zahlensystems, z.B. 二十四 statt 24 im ja_JP-Locale tm_sec
Sonstiges
c schreibt Standard-Datum- und Zeitzeichenkette , z.B. Sun Oct 17 04:41:13 2010 (lokalabhängig) alle
Ec
(C++11)
schreibt alternative Datums- und Zeitzeichenkette , z.B. Verwendung von 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Locale alle
x schreibt lokalisierte Datumsdarstellung (lokalabhängig) alle
Ex
(C++11)
schreibt alternative Datumsdarstellung , z.B. Verwendung von 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Locale alle
X schreibt lokalisierte Zeitdarstellung , z.B. 18:40:20 oder 6:40:20 PM (lokalabhängig) alle
EX
(C++11)
schreibt alternative Zeitdarstellung (lokalisierungsabhängig) alle
D
(C++11)
entspricht "%m/%d/%y" tm_mon , tm_mday , tm_year
F
(C++11)
entspricht "%Y-%m-%d" (dem ISO 8601 Datumsformat) tm_mon , tm_mday , tm_year
r
(C++11)
schreibt lokalisierte 12-Stunden-Uhrzeit (lokalabhängig) tm_hour , tm_min , tm_sec
R
(C++11)
entspricht "%H:%M" tm_hour , tm_min
T
(C++11)
entspricht "%H:%M:%S" (dem ISO 8601 Zeitformat) tm_hour , tm_min , tm_sec
p schreibt lokalisiertes a.m. oder p.m. (lokalabhängig) tm_hour
z
(C++11)
schreibt den UTC-Offset im ISO-8601-Format (z.B. -0430 ) oder keine Zeichen, wenn die Zeitzoneninformation nicht verfügbar ist tm_isdst
Z schreibt den gebietsschemaabhängigen Zeitzonennamen oder die Abkürzung , oder keine Zeichen, wenn die Zeitzoneninformation nicht verfügbar ist tm_isdst

Rückgabewert

Iterator, der auf eine Position hinter dem letzten erzeugten Zeichen zeigt.

Hinweise

Es wird keine Fehlerbehandlung bereitgestellt.

Das fill -Zeichen wird für die implementierungsdefinierten Formatspezifizierer und für die benutzerdefinierten Überschreibungen von do_put() bereitgestellt, die Padding- und Füll-Logik verwenden. Solche Implementierungen nutzen typischerweise die Formatierungsflags aus str .

Beispiel

#include <iostream>
#include <sstream>
#include <iomanip>
#include <ctime>
void try_time_put(const std::tm* t, const std::string& fmt)
{
    std::cout.imbue(std::locale());
    std::cout << "In the locale '" << std::cout.getloc().name() << "' : '";
    std::use_facet<std::time_put<char>>(std::cout.getloc()).put(
        {std::cout}, std::cout, ' ', t, &fmt[0], &fmt[0] + fmt.size());
    std::cout << "'\n";
}
int main()
{
    std::time_t t = std::time(NULL);
    std::tm tm = *std::localtime(&t);
    std::string fmt = "%c";
    std::cout << "Using the format string '" << fmt
              << "' to format the time: " << std::ctime(&t) << '\n';
    std::locale::global(std::locale("de_DE.utf8"));
    try_time_put(&tm, fmt);
    std::locale::global(std::locale("el_GR.utf8"));
    try_time_put(&tm, fmt);
    std::locale::global(std::locale("ja_JP.utf8"));
    try_time_put(&tm, fmt);
}

Mögliche Ausgabe:

Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013
In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST'
In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST'
In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'

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 164 C++98 der Zweck des Parameters fill war nicht klar klargestellt

Siehe auch

(C++11)
formatiert und gibt einen Datums-/Zeitwert gemäß dem angegebenen Format aus
(Funktions-Template)
[virtual] (C++11)
extrahiert Datums-/Zeitkomponenten aus einem Eingabestrom gemäß dem angegebenen Format
(geschützte virtuelle Memberfunktion von std::time_get<CharT,InputIt> )