Namensräume
Varianten
Aktionen

std::time_get<CharT,InputIt>::get_weekday, std::time_get<CharT,InputIt>::do_get_weekday

Von cppreference.com
< cpp‎ | locale‎ | time get
 
 
 
 
 
Definiert in Header <locale>
public:

iter_type get_weekday( iter_type beg, iter_type end, std::ios_base& str,

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

virtual iter_type do_get_weekday( iter_type beg, 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_weekday der am weitesten abgeleiteten Klasse auf.
2) Liest aufeinanderfolgende Zeichen aus der Sequenz [begend) und analysiert den Wochentagnamen (möglicherweise abgekürzt) unter Verwendung des Standardformats für Wochentage, das von dieser Locale erwartet wird, welches dasselbe Format wie "%a" ist, wie es von den Funktionen std::get_time, time_get::get und der POSIX-Funktion strptime() verwendet wird.

Wenn ein abgekürzter Name gefunden wird, gefolgt von Zeichen, die für den vollständigen Namen gültig sind, wird das Lesen fortgesetzt, bis alle Zeichen für den vollständigen Namen verbraucht sind oder ein unerwartetes Zeichen gefunden wird. In diesem Fall schlägt die Analyse fehl, auch wenn die ersten paar Zeichen eine gültige Abkürzung waren.

Der analysierte Wochentag wird im Feld std::tm t->tm_wday gespeichert.

Wenn der End-Iterator erreicht wird, bevor ein gültiger Wochentagsname gelesen wurde, setzt die Funktion std::ios_base::eofbit in err. Wenn ein Analysefehler auftritt, setzt die Funktion std::ios_base::failbit in err.

Inhalt

[bearbeiten] 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

[bearbeiten] Rückgabewert

Iterator, der auf das Zeichen nach dem letzten Zeichen in [begend) zeigt, das als Teil eines gültigen Wochentagnamens erkannt wurde.

[bearbeiten] Hinweise

Diese Funktion ist normalerweise nicht case-sensitiv.

Wenn ein Analysefehler auftritt, lassen die meisten Implementierungen dieser Funktion *t unverändert.

[bearbeiten] Beispiel

#include <initializer_list>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string_view>
 
void try_get_wday(std::string_view s)
{
    std::cout << "Parsing the weekday out of '" << s
              << "' in the locale " << std::locale().name() << '\n';
    std::istringstream str{s.data()};
    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_weekday({str}, {}, str, err, &t);
    str.setstate(err);
    std::istreambuf_iterator<char> last{};
 
    if (str)
    {
        std::cout << "Successfully parsed, weekday number is " << t.tm_wday;
 
        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';
}
 
void demo(std::string_view locale_name, std::initializer_list<std::string_view>&& data)
{
    try
    {
        std::locale::global(std::locale(locale_name.data()));
    }
    catch (std::runtime_error const& ex)
    {
        std::cout << "Cannot setup locale: " << locale_name << "\n"
                     "Exception: " << ex.what() << '\n';
        return;
    }
 
    for (std::string_view const weekday : data)
        try_get_wday(weekday);
}
 
int main()
{
    demo("lt_LT.utf8", {"Št", "Šeštadienis"});
    demo("en_US.utf8", {"SATELLITE"});
    demo("ja_JP.utf8", {"土曜日"});
}

Mögliche Ausgabe

Parsing the weekday out of 'Št' in the locale lt_LT.utf8
Successfully parsed, weekday number is 6 the input was fully consumed
Parsing the weekday out of 'Šeštadienis' in the locale lt_LT.utf8
Successfully parsed, weekday number is 6 the input was fully consumed
Parsing the weekday out of 'SATELLITE' in the locale en_US.utf8
Successfully parsed, weekday number is 6 Remaining content: ELLITE
Parsing the weekday out of '土曜日' in the locale ja_JP.utf8
Successfully parsed, weekday number is 6 the input was fully consumed

[bearbeiten] Fehlerberichte

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ültiger Wochentagsname gelesen wurde

[bearbeiten] Siehe auch

(C++11)
Parst einen Datums-/Zeitwert nach dem angegebenen Format
(Funktion-Template) [bearbeiten]