std::time_get<CharT,InputIt>::get_monthname, std::time_get<CharT,InputIt>::do_get_monthname
| Definiert in Header <locale> |
||
| public: iter_type get_monthname( iter_type beg, iter_type end, std::ios_base& str, |
(1) | |
| protected: virtual iter_type do_get_monthname( iter_type beg, iter_type end, std::ios_base& str, |
(2) | |
do_get_monthname der am weitesten abgeleiteten Klasse auf.[beg, end) und parst den Monatsnamen (möglicherweise abgekürzt) gemäß dem Standardformat für Monatsnamen, das von dieser Locale erwartet wird. Dies ist dasselbe Format wie "%b", wie es von den Funktionen std::get_time, time_get::get und der POSIX-Funktion strptime() verwendet wird.Wenn ein abgekürzter Name gefolgt von Zeichen gefunden wird, die für den vollständigen Namen gültig sind, werden weiterhin Zeichen gelesen, 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 Zeichen eine gültige Abkürzung waren.
Der analysierte Monat wird im Feld t->tm_mon des std::tm-Objekts gespeichert.
Wenn der End-Iterator erreicht wird, bevor ein gültiger Monatsname 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 |
[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 Element nach dem letzten Zeichen in [beg, end) zeigt, das als Teil eines gültigen Monatsnamens erkannt wurde.
[edit] Hinweise
Diese Funktion ist in der Regel nicht case-sensitiv.
Wenn ein Analysefehler auftritt, lassen die meisten Implementierungen dieser Funktion *t unverändert.
[edit] 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
[edit] 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 Monatsname gelesen wurde |
[edit] Siehe auch
| (C++11) |
Parst einen Datums-/Zeitwert nach dem angegebenen Format (Funktion-Template) |