std::time_get<CharT,InputIt>:: get_monthname, std::time_get<CharT,InputIt>:: do_get_monthname
|
Definido en el encabezado
<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
de la clase más derivada.
[
beg
,
end
)
y analiza el nombre del mes (posiblemente abreviado), utilizando el formato predeterminado para nombres de meses esperado por esta configuración regional, que es el mismo formato que
"%b"
utilizado por las funciones
std::get_time
,
time_get::get
, y la función POSIX
strptime()
.
Si encuentra un nombre abreviado, seguido de los caracteres que son válidos para el nombre completo, continúa leyendo hasta que consume todos los caracteres para el nombre completo o encuentra un carácter que no es esperado, en cuyo caso el análisis falla incluso si los primeros caracteres eran una abreviatura válida.
El mes analizado se almacena en el campo std::tm t - > tm_mon .
Si se alcanza el iterador final antes de leer un nombre de mes válido, la función establece std::ios_base::eofbit en err . Si se encuentra un error de análisis, la función establece std::ios_base::failbit en err .
Contenidos |
Parámetros
| beg | - | iterador que designa el inicio de la secuencia a analizar |
| end | - | iterador que apunta una posición después del final de la secuencia a analizar |
| str | - | objeto de flujo que esta función utiliza para obtener facetas de configuración regional cuando es necesario, ej. std::ctype para omitir espacios en blanco o std::collate para comparar cadenas |
| err | - | objeto de indicadores de error de flujo que es modificado por esta función para indicar errores |
| t | - | puntero al objeto std::tm que contendrá el resultado de esta llamada de función |
Valor de retorno
Iterador que apunta una posición después del último carácter en
[
beg
,
end
)
que fue reconocido como parte de un nombre de mes válido.
Notas
Esta función suele ser insensible a mayúsculas y minúsculas.
Si se encuentra un error de análisis, la mayoría de las implementaciones de esta función dejan * t sin modificar.
Ejemplo
#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"); }
Salida posible:
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
Informes de defectos
Los siguientes informes de defectos que modifican el comportamiento se aplicaron retroactivamente a los estándares publicados anteriormente de C++.
| DR | Aplicado a | Comportamiento publicado | Comportamiento correcto |
|---|---|---|---|
| LWG 248 | C++98 |
eofbit
no se establecía al alcanzar el iterador final
|
establece
eofbit
si no se ha leído un nombre de mes válido
|
Véase también
|
(C++11)
|
analiza un valor de fecha/hora con formato especificado
(plantilla de función) |