std::time_get<CharT,InputIt>:: get_monthname, std::time_get<CharT,InputIt>:: do_get_monthname
|
Definiert im 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 meisten abgeleiteten Klasse auf.
[
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) |