std::time_get<CharT,InputIt>:: get_year, std::time_get<CharT,InputIt>:: do_get_year
|
Definiert im Header
<locale>
|
||
|
public
:
iter_type get_year
(
iter_type s, iter_type end,
std::
ios_base
&
str,
|
(1) | |
|
protected
:
virtual
iter_type do_get_year
(
iter_type s, iter_type end,
std::
ios_base
&
str,
|
(2) | |
do_get_year
der am meisten abgeleiteten Klasse auf.
[
beg
,
end
)
und analysiert das Jahr unter Verwendung eines implementierungsdefinierten Formats. Abhängig vom Gebietsschema können zweistellige Jahre akzeptiert werden, und es ist implementierungsdefiniert, zu welchem Jahrhundert sie gehören.
Das geparste Jahr wird im Feld std::tm der Struktur t - > tm_year gespeichert.
Wenn der End-Iterator erreicht wird, bevor ein gültiges Jahr gelesen wird, setzt die Funktion std::ios_base::eofbit in err . Wenn ein Parsing-Fehler auftritt, setzt die Funktion std::ios_base::failbit in err .
Inhaltsverzeichnis |
Parameter
| beg | - | Iterator, der den Start der zu parsenden Sequenz kennzeichnet |
| end | - | Iterator, der auf das Element nach dem Ende der zu parsenden Sequenz zeigt |
| str | - | Ein Stream-Objekt, das diese Funktion zur Beschaffung von Locale-Facets bei Bedarf 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 |
Rückgabewert
Iterator, der auf eine Position hinter das letzte Zeichen in
[
beg
,
end
)
zeigt, das als Teil eines gültigen Jahres erkannt wurde.
Hinweise
Für zweistellige Eingabewerte verwenden viele Implementierungen dieselben Parsing-Regeln wie die Konvertierungsspezifikation
'%y'
, wie sie von
std::get_time
,
std::time_get::get()
und der POSIX-Funktion
strptime()
verwendet wird: Es wird eine zweistellige Ganzzahl erwartet, wobei Werte im Bereich
[
69
,
99
]
zu Werten von 1969 bis 1999 führen, der Bereich
[
00
,
68
]
zu Werten von 2000 bis 2068. Vierstellige Eingaben werden typischerweise unverändert akzeptiert.
Wenn ein Parsing-Fehler auftritt, lassen die meisten Implementierungen dieser Funktion * t unverändert.
Beispiel
#include <iostream> #include <iterator> #include <locale> #include <sstream> void try_get_year(const std::string& s) { std::cout << "Parsing the year out of '" << s << "' in the locale " << std::locale().name() << '\n'; std::istringstream str(s); std::ios_base::iostate err = std::ios_base::goodbit; std::tm t; std::time_get<char> const& facet = std::use_facet<std::time_get<char>>(str.getloc()); std::istreambuf_iterator<char> ret = facet.get_year({str}, {}, str, err, &t); str.setstate(err); std::istreambuf_iterator<char> last{}; if (str) { std::cout << "Successfully parsed, year is " << 1900 + t.tm_year; if (ret != last) { std::cout << " Remaining content: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } else std::cout << " the input was fully consumed"; } else { std::cout << "Parse failed. Unparsed string: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; } int main() { std::locale::global(std::locale("en_US.utf8")); try_get_year("13"); try_get_year("2013"); std::locale::global(std::locale("ja_JP.utf8")); try_get_year("2013年"); }
Mögliche Ausgabe:
Parsing the year out of '13' in the locale en_US.utf8 Successfully parsed, year is 2013 the input was fully consumed Parsing the year out of '2013' in the locale en_US.utf8 Successfully parsed, year is 2013 the input was fully consumed Parsing the year out of '2013年' in the locale ja_JP.utf8 Successfully parsed, year is 2013 Remaining content: 年
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 248 | C++98 |
eofbit
wurde beim Erreichen des End-Iterators nicht gesetzt
|
setzt
eofbit
wenn kein gültiges Jahr gelesen wurde
|
Siehe auch
|
(C++11)
|
analysiert einen Datums-/Zeitwert im angegebenen Format
(Funktionsschablone) |