Namensräume
Varianten
Aktionen

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

Von cppreference.com
< cpp‎ | locale‎ | time get
 
 
 
 
 
Definiert in 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 weitesten abgeleiteten Klasse auf.
2) Liest aufeinanderfolgende Zeichen aus der Sequenz [begend) 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 [begend) 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 [6999] ergeben die Werte 1969 bis 1999, Bereich [0068] 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) [bearbeiten]