std::time_get<CharT,InputIt>::get_year, std::time_get<CharT,InputIt>::do_get_year
| Definiert in 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 weitesten abgeleiteten Klasse auf.[beg, end) und parst das Jahr mit einem implementierungsdefinierten Format. Abhängig von der Locale können zweistellige Jahre akzeptiert werden, und es ist implementierungsdefiniert, zu welchem Jahrhundert sie gehören.Das geparste Jahr wird im Feld t->tm_year der std::tm-Struktur gespeichert.
Wenn das End-Iterator erreicht wird, bevor ein gültiges Jahr gelesen wurde, setzt die Funktion std::ios_base::eofbit in err. Wenn ein Parsing-Fehler auftritt, setzt die Funktion std::ios_base::failbit in err.
Inhalt |
[edit] Parameter
| beg | - | Iterator, der den Anfang der zu analysierenden Sequenz bezeichnet |
| end | - | Iterator, der auf ein Element nach dem Ende der zu analysierenden Sequenz zeigt |
| str | - | Ein Stream-Objekt, das diese Funktion verwendet, um Locale-Facets bei Bedarf zu erhalten, z. B. std::ctype zum Überspringen von Leerzeichen oder std::collate zum Vergleichen von Zeichenketten |
| err | - | Objekt für Stream-Fehlerflags, das von dieser Funktion modifiziert wird, um Fehler anzuzeigen |
| t | - | Zeiger auf das std::tm-Objekt, das das Ergebnis dieses Funktionsaufrufs speichern wird |
[edit] Rückgabewert
Iterator, der auf das letzte Zeichen in [beg, end) zeigt, das als Teil eines gültigen Jahres erkannt wurde.
[edit] Anmerkungen
Für zweistellige Eingabewerte verwenden viele Implementierungen dieselben Parsing-Regeln wie für den Konvertierungs-Spezifizierer '%y', wie er von std::get_time, std::time_get::get() und der POSIX-Funktion strptime() verwendet wird: Es wird eine zweistellige Ganzzahl erwartet. Werte im Bereich [69, 99] ergeben die Werte 1969 bis 1999, Bereich [00, 68] ergeben 2000 bis 2068. Vierstellige Eingaben werden typischerweise unverändert übernommen.
Wenn ein Analysefehler auftritt, lassen die meisten Implementierungen dieser Funktion *t unverändert.
[edit] 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: 年
[edit] Defect reports
Die folgenden Verhaltensändernden Fehlerberichte wurden rückwirkend auf zuvor veröffentlichte C++-Standards angewendet.
| DR | angewendet auf | Verhalten wie veröffentlicht | Korrigiertes Verhalten |
|---|---|---|---|
| LWG 248 | C++98 | eofbit wurde nicht gesetzt, als der End-Iterator erreicht wurde |
Setzt eofbit, wenn kein gültiges Jahr gelesen wurde |
[edit] Siehe auch
| (C++11) |
Parst einen Datums-/Zeitwert nach dem angegebenen Format (Funktion-Template) |