std::time_get<CharT,InputIt>:: get, std::time_get<CharT,InputIt>:: do_get
|
Definiert in Header
<locale>
|
||
|
public
:
iter_type get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(1) | (seit C++11) |
|
protected
:
virtual
iter_type do_get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(2) | (seit C++11) |
do_get
angepasst werden kann. Die
get
-Funktion führt folgende Schritte aus:
Zuerst löscht sie die Fehlerbits in
err
durch Ausführung von
err
=
std::
ios_base
::
goodbit
. Danach tritt sie in eine Schleife ein, die beendet wird, sobald eine der folgenden Bedingungen erfüllt ist (in dieser Reihenfolge geprüft):
eofbit
als auch
failbit
in
err
.
-
- Im Körper der Schleife finden die folgenden Schritte statt:
%
und dem Formatzeichen erscheint, falls vorhanden). Wenn kein Modifikator vorhanden ist, wird der Wert
'
\0
'
verwendet. Wenn die Formatzeichenfolge mehrdeutig ist oder zu früh endet, um den Konvertierungsspezifizierer nach
'%'
zu bestimmen, wird
eofbit
in
err
gesetzt und die Schleife beendet. Wenn nach dem Aufruf von
do_get
keine Fehlerbits in
err
gesetzt sind, erhöht die Funktion
fmtbeg
, um direkt nach dem Konvertierungsspezifizierer zu zeigen, und setzt die Schleife fort.
failbit
in
err
.
-
-
Zuerst löscht es die Fehlerbits in
err
durch Ausführung von
err
=
std::
ios_base
::
goodbit
. Liest dann Zeichen aus der Eingabesequenz
[
beg, end
)
, die durch den
std::time_get
Format-Spezifizierer erwartet werden, gebildet durch Kombination von
'%'
,
modifier
(falls nicht
'
\0
'
), und
format
. Wenn die Zeichen keine gültige Konvertierungs-Spezifikation bilden, setzt es
failbitin err . Wenn das Ende des Eingabestroms nach dem Lesen eines Zeichens erreicht wird, setzt eseofbitin err . Wenn die Eingabezeichenkette erfolgreich geparst wurde, aktualisiert es die entsprechenden Felder von * t .
-
Zuerst löscht es die Fehlerbits in
err
durch Ausführung von
err
=
std::
ios_base
::
goodbit
. Liest dann Zeichen aus der Eingabesequenz
[
beg, end
)
, die durch den
std::time_get
Format-Spezifizierer erwartet werden, gebildet durch Kombination von
'%'
,
modifier
(falls nicht
'
\0
'
), und
format
. Wenn die Zeichen keine gültige Konvertierungs-Spezifikation bilden, setzt es
-
-
Für komplexe Konvertierungsspezifizierer, wie
'%x'
oder
'%c'
, oder für Direktiven, die die Modifikatoren
'E'
und
'O'
verwenden, kann die Funktion möglicherweise einige der Werte nicht bestimmen, die in
*
t
gespeichert werden sollen. In einem solchen Fall setzt sie
eofbitin err und belässt diese Felder in einem nicht spezifizierten Zustand.
-
Für komplexe Konvertierungsspezifizierer, wie
'%x'
oder
'%c'
, oder für Direktiven, die die Modifikatoren
'E'
und
'O'
verwenden, kann die Funktion möglicherweise einige der Werte nicht bestimmen, die in
*
t
gespeichert werden sollen. In einem solchen Fall setzt sie
Inhaltsverzeichnis |
Parameter
| beg | - | Iterator, der den Beginn der zu parsenden Sequenz kennzeichnet |
| end | - | Iterator, der auf das Ende der zu parsenden Sequenz zeigt (eins hinter dem letzten Element) |
| str | - | Ein Stream-Objekt, das diese Funktion zur Beschaffung von Locale-Facets verwendet, z.B. std::ctype zum Überspringen von Leerzeichen oder std::collate zum Vergleichen von Zeichenketten |
| err | - | Stream-Fehlerflags-Objekt, das von dieser Funktion zur Fehleranzeige modifiziert wird |
| t | - | Zeiger auf das std::tm -Objekt, das das Ergebnis dieses Funktionsaufrufs enthält |
| fmtbeg | - |
Zeiger auf das erste Zeichen einer Sequenz von
char_type
-Zeichen, die das Konvertierungsformat spezifizieren (siehe unten)
|
| fmtend | - |
Zeiger auf das Ende einer Sequenz von
char_type
-Zeichen, die das Konvertierungsformat spezifizieren (eins hinter dem letzten Zeichen)
|
| format | - | Das Zeichen, das einen Konvertierungsspezifizierer benennt |
| modifier | - |
Der optionale Modifikator, der zwischen
%
und dem Konvertierungsspezifizierer erscheinen kann
|
Die Formatzeichenfolge besteht aus null oder mehr Konvertierungsspezifizierern, Leerzeichen und gewöhnlichen Zeichen (außer
%
). Von jedem gewöhnlichen Zeichen wird erwartet, dass es genau ein Zeichen im Eingabestrom bei Groß-/Kleinschreibung-ignorierendem Vergleich entspricht. Jedes Leerzeichen entspricht beliebigem Leerraum in der Eingabezeichenfolge. Jede Konvertierungsspezifikation beginnt mit dem
%
-Zeichen, optional gefolgt von einem
E
- oder
O
-Modifizierer (wird ignoriert, wenn vom Locale nicht unterstützt), gefolgt von dem Zeichen, das das Verhalten der Spezifizierung bestimmt. Die Formatspezifizierer entsprechen der POSIX-Funktion
strptime()
:
|
Konvertierungsspezifizierer
|
Erklärung | Schreibt in Felder |
|---|---|---|
%
|
entspricht einem wörtlichen
%
. Die vollständige Konvertierungsspezifikation muss
%%
lauten
|
(keine) |
t
|
entspricht jedem Leerzeichen | (keine) |
n
|
entspricht jedem Leerzeichen | (keine) |
| Jahr | ||
Y
|
analysiert das vollständige Jahr als 4-stellige Dezimalzahl, führende Nullen erlaubt aber nicht erforderlich |
tm_year
|
EY
|
analysiert Jahr in der alternativen Darstellung, z.B. 平成23年 (Jahr Heisei 23), was 2011 in tm_year im ja_JP-Locale schreibt |
tm_year
|
y
|
analysiert die letzten 2 Ziffern des
Jahres
als Dezimalzahl. Bereich
[69,99]
ergibt Werte 1969 bis 1999, Bereich
[00,68]
ergibt 2000-2068
|
tm_year
|
Oy
|
analysiert die letzten 2 Ziffern des Jahres unter Verwendung des alternativen Zahlensystems, z.B. wird 十一 als 11 im ja_JP-Locale analysiert |
tm_year
|
Ey
|
analysiert
year
als Offset vom alternativen Kalenderzeitraum des Gebietsschemas
%EC
|
tm_year
|
C
|
analysiert die ersten 2 Ziffern von
year
als Dezimalzahl (Bereich
[00,99]
)
|
tm_year
|
EC
|
analysiert den Namen des Basisjahres (Zeitraums) in der alternativen Darstellung des Gebietsschemas, z.B. 平成 (Heisei-Ära) in ja_JP |
tm_year
|
| Monat | ||
b
|
analysiert den Monatsnamen, entweder vollständig oder abgekürzt, z.B.
Oct
|
tm_mon
|
h
|
Synonym von
b
|
tm_mon
|
B
|
Synonym von
b
|
tm_mon
|
m
|
analysiert den
Monat
als Dezimalzahl (Bereich
[01,12]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_mon
|
Om
|
analysiert den Monat unter Verwendung des alternativen Zahlensystems, z.B. wird 十二 als 12 im ja_JP-Locale analysiert |
tm_mon
|
| Woche | ||
U
|
analysiert die
Kalenderwoche des Jahres
als Dezimalzahl (Sonntag ist der erste Tag der Woche) (Bereich
[00,53]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_year
,
tm_wday
,
tm_yday
|
OU
|
analysiert die
Kalenderwoche des Jahres
, wie durch
%U
, unter Verwendung des alternativen Zahlensystems, z.B. wird 五十二 als 52 im ja_JP-Locale analysiert
|
tm_year
,
tm_wday
,
tm_yday
|
W
|
analysiert die
Kalenderwoche des Jahres
als Dezimalzahl (Montag ist der erste Tag der Woche) (Bereich
[00,53]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_year
,
tm_wday
,
tm_yday
|
OW
|
analysiert die
Kalenderwoche des Jahres
, wie durch
%W
, unter Verwendung des alternativen Zahlensystems, z.B. wird 五十二 als 52 im ja_JP-Locale analysiert
|
tm_year
,
tm_wday
,
tm_yday
|
| Tag des Jahres/Monats | ||
j
|
analysiert den
Tag des Jahres
als Dezimalzahl (Bereich
[001,366]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_yday
|
d
|
analysiert den
Tag des Monats
als Dezimalzahl (Bereich
[01,31]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_mday
|
Od
|
analysiert den Tag des Monats unter Verwendung des alternativen Zahlensystems, z.B. wird 二十七 im ja_JP-Locale als 27 analysiert, führende Nullen erlaubt aber nicht erforderlich |
tm_mday
|
e
|
Synonym für
d
|
tm_mday
|
Oe
|
Synonym von
Od
|
tm_mday
|
| Wochentag | ||
a
|
analysiert den Namen des Wochentags, entweder vollständig oder abgekürzt, z.B.
Fri
|
tm_wday
|
A
|
Synonym von
a
|
tm_wday
|
w
|
analysiert
weekday
als Dezimalzahl, wobei Sonntag
0
ist (Bereich
[0-6]
)
|
tm_wday
|
Ow
|
analysiert
weekday
als Dezimalzahl, wobei Sonntag
0
ist, unter Verwendung des alternativen Zahlensystems, z.B. wird 二 in ja_JP-Lokalisierung als 2 analysiert
|
tm_wday
|
| Stunde, Minute, Sekunde | ||
H
|
analysiert die
Stunde
als Dezimalzahl, 24-Stunden-Format (Bereich
[00-23]
), führende Nullen erlaubt aber nicht erforderlich
|
tm_hour
|
OH
|
analysiert Stunde aus dem 24-Stunden-Format unter Verwendung des alternativen Zahlensystems, z.B. wird 十八 in ja_JP-Lokalisierung als 18 analysiert |
tm_hour
|
I
|
analysiert
hour
als Dezimalzahl, 12-Stunden-Zählung (Bereich
[01,12]
), führende Nullen erlaubt aber nicht erforderlich
|
tm_hour
|
OI
|
analysiert Stunde aus dem 12-Stunden-Format unter Verwendung des alternativen Zahlensystems, z.B. wird 六 im ja_JP-Locale als 06 gelesen |
tm_hour
|
M
|
analysiert
minute
als Dezimalzahl (Bereich
[00,59]
), führende Nullen erlaubt, aber nicht erforderlich
|
tm_min
|
OM
|
analysiert minute unter Verwendung des alternativen Zahlensystems, z.B. wird 二十五 als 25 in ja_JP-Locale analysiert |
tm_min
|
S
|
analysiert
second
als Dezimalzahl (Bereich
[00,60]
), führende Nullen erlaubt aber nicht erforderlich
|
tm_sec
|
OS
|
analysiert second unter Verwendung des alternativen Zahlensystems, z.B. wird 二十四 als 24 in der ja_JP-Lokalisierung analysiert |
tm_sec
|
| Sonstiges | ||
c
|
analysiert das Standard-Datums- und Zeitformat der Locale, z.B.
Sun Oct 17 04:41:13 2010
(lokaleabhängig)
|
alle |
Ec
|
analysiert das alternative Datums- und Zeitformat der Locale, z.B. erwartet 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) in der ja_JP-Locale | alle |
x
|
analysiert die Standarddatumsdarstellung des Gebietsschemas | alle |
Ex
|
analysiert die alternative Datumsdarstellung des Gebietsschemas, z.B. erwartet 平成23年 (Jahr Heisei 23) statt 2011年 (Jahr 2011) im ja_JP-Gebietsschema | alle |
X
|
analysiert die Standardzeitdarstellung des Gebietsschemas | alle |
EX
|
analysiert die alternative Zeitdarstellung des Gebietsschemas | alle |
D
|
entspricht "%m / %d / %y " |
tm_mon
,
tm_mday
,
tm_year
|
r
|
analysiert die lokale Standard-12-Stunden-Zeit (in POSIX, "%I : %M : %S %p" ) |
tm_hour
,
tm_min
,
tm_sec
|
R
|
entspricht "%H : %M" |
tm_hour
,
tm_min
|
T
|
entspricht "%H : %M : %S" |
tm_hour
,
tm_min
,
tm_sec
|
p
|
analysiert das lokale Äquivalent von a.m. or p.m. |
tm_hour
|
Hinweis:
tm_isdst
wird nicht beschrieben und muss explizit gesetzt werden für die Verwendung mit Funktionen wie
mktime
Rückgabewert
Iterator, der auf eine Position nach dem letzten erfolgreich geparsten Zeichen in [ beg, end ) zeigt.
Hinweise
Der Groß-/Kleinschreibung-ignorierende Vergleich für die Nicht-Leerzeichen-, Nicht- '%' -Zeichen in der Formatzeichenfolge verwendet typischerweise, aber nicht zwingend, die std::collate -Facette der durch str bereitgestellten Locale.
Wenn ein Parsing-Fehler auftritt, lassen viele Implementierungen dieser Funktion * t vollständig unverändert.
Es ist nicht spezifiziert, ob diese Funktionen die Felder in
*
t
auf Null setzen, die sie nicht direkt setzen: portable Programme sollten jedes Feld vor dem Aufruf von
get()
auf Null initialisieren.
Beispiel
#include <iomanip> #include <iostream> #include <locale> #include <sstream> int main() { std::istringstream ss("2026-März-12 23:45:56"); ss.imbue(std::locale("de_DE.utf8")); auto& f = std::use_facet<std::time_get<char>>(ss.getloc()); std::tm t{}; std::string s = "%Y-%b-%d %H:%M:%S"; std::ios_base::iostate err = std::ios_base::goodbit; auto ret = f.get({ss}, {}, ss, err, &t, &s[0], &s[0] + s.size()); ss.setstate(err); std::istreambuf_iterator<char> last{}; if (ss) { std::cout << "Erfolgreich geparst als " << std::put_time(&t, "%c") << '\n'; if (ret != last) { std::cout << "Verbleibender Inhalt: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << "Die Eingabe wurde vollständig verarbeitet."; } else { std::cout << "Parsen fehlgeschlagen.\nUngeparster String: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; }
Ausgabe:
Successfully parsed as Sun Mar 12 23:45:56 2026 The input was fully consumed.
Siehe auch
|
(C++11)
|
analysiert einen Datums-/Zeitwert in angegebenem Format
(Funktionsschablone) |