std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put
|
Definiert im Header
<locale>
|
||
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(1) | |
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(2) | |
|
protected
:
virtual
iter_type do_put
(
iter_type out,
std::
ios_base
&
str,
|
(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.
[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.
do_put
Memberfunktion der am stärksten abgeleiteten Klasse auf.
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:
|
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:
|
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:
|
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>
)
|