Namespaces
Variants

std::time_get<CharT,InputIt>:: get_year, std::time_get<CharT,InputIt>:: do_get_year

From cppreference.net
Definiert im Header <locale>
public :

iter_type get_year ( iter_type s, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(1)
protected :

virtual iter_type do_get_year ( iter_type s, iter_type end, std:: ios_base & str,

std:: ios_base :: iostate & err, std:: tm * t ) const ;
(2)
1) Öffentliche Memberfunktion, ruft die geschützte virtuelle Memberfunktion do_get_year der am meisten abgeleiteten Klasse auf.
2) Liest aufeinanderfolgende Zeichen aus der Sequenz [ 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)