Namespaces
Variants

std::time_get<CharT,InputIt>:: get_monthname, std::time_get<CharT,InputIt>:: do_get_monthname

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

iter_type get_monthname ( 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_monthname ( 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_monthname der am meisten abgeleiteten Klasse auf.
2) Liest aufeinanderfolgende Zeichen aus der Sequenz [ beg , end ) und analysiert den Monatsnamen (möglicherweise abgekürzt), unter Verwendung des Standardformats für Monatsnamen, das von dieser Locale erwartet wird, welches dasselbe Format ist wie "%b" , 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 Monat wird im Feld std::tm t - > tm_mon gespeichert.

Wenn der End-Iterator erreicht wird, bevor ein gültiger Monatsname 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 aufnehmen wird

Rückgabewert

Iterator, der auf das Zeichen nach dem letzten Zeichen in [ beg , end ) zeigt, das als Teil eines gültigen Monatsnamens 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 <ctime>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string_view>
void try_get_mon(std::string_view locale_name, std::string_view source)
{
    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;
    }
    std::cout << "Parsing the month out of '" << source
              << "' in the locale " << std::locale().name() << '\n';
    std::istringstream str{source.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_monthname({str}, {}, str, err, &t);
    str.setstate(err);
    std::istreambuf_iterator<char> last{};
    if (str)
    {
        std::cout << "Successfully parsed, month number is " << t.tm_mon;
        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()
{
    try_get_mon("ja_JP.utf8", "2月");
    try_get_mon("th_TH.utf8", "กุมภาพันธ์");
    try_get_mon("el_GR.utf8", "Φεβ");
    try_get_mon("el_GR.utf8", "Φεβρουάριος");
    try_get_mon("en_US.utf8", "Febrile");
}

Mögliche Ausgabe:

Parsing the month out of '2月' in the locale ja_JP.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'กุมภาพันธ์' in the locale th_TH.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Φεβ' in the locale el_GR.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Φεβρουάριος' in the locale el_GR.utf8
Successfully parsed, month number is 1. The input was fully consumed
Parsing the month out of 'Febrile' in the locale en_US.utf8
Parse failed. Unparsed string: ile

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 beim Erreichen des End-Iterators nicht gesetzt setzt eofbit wenn kein gültiger Monatsname gelesen wurde

Siehe auch

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