Namespaces
Variants

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

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

Wenn es einen abgekürzten Namen gefolgt von Zeichen findet, die für den vollständigen Namen gültig sind, liest es weiter, bis es alle Zeichen für den vollständigen Namen verarbeitet hat oder ein unerwartetes Zeichen findet, in welchem Fall das Parsing fehlschlägt, selbst wenn die ersten paar Zeichen eine gültige Abkürzung waren.

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

Wenn der End-Iterator erreicht wird, bevor ein gültiger Wochentagsname 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 modifiziert wird, um Fehler anzuzeigen
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 Wochentagnamens erkannt wurde.

Hinweise

Diese Funktion ist in der Regel case-insensitive.

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

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 << "Wochentag aus '" << s
              << "' in der 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 << "Erfolgreich geparst, Wochentagsnummer ist " << t.tm_wday;
        if (ret != last)
        {
            std::cout << " Verbleibender Inhalt: ";
            std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout));
        }
        else
            std::cout << " die Eingabe wurde vollständig verarbeitet";
    }
    else
    {
        std::cout << "Parsen fehlgeschlagen. Nicht geparster 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 << "Locale kann nicht eingerichtet werden: " << 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:

Ermittlung des Wochentags aus 'Št' in der Locale lt_LT.utf8
Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet
Ermittlung des Wochentags aus 'Šeštadienis' in der Locale lt_LT.utf8
Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet
Ermittlung des Wochentags aus 'SATELLITE' in der Locale en_US.utf8
Erfolgreich geparst, Wochentagnummer ist 6 Verbleibender Inhalt: ELLITE
Ermittlung des Wochentags aus '土曜日' in der Locale ja_JP.utf8
Erfolgreich geparst, Wochentagnummer ist 6 die Eingabe wurde vollständig verarbeitet

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

Siehe auch

(C++11)
analysiert einen Datums-/Zeitwert im angegebenen Format
(Funktionsschablone)