Namespaces
Variants

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

From cppreference.net
Definido en el encabezado <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) Función miembro pública, llama a la función miembro virtual protegida do_get_weekday de la clase más derivada.
2) Lee caracteres sucesivos de la secuencia [ beg , end ) y analiza el nombre del día de la semana (posiblemente abreviado), utilizando el formato predeterminado para días de la semana esperado por esta configuración regional, que es el mismo formato que "%a" utilizado por las funciones std::get_time , time_get::get , y la función POSIX strptime() .

Si encuentra un nombre abreviado, seguido de 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 día de la semana analizado se almacena en el campo std::tm t - > tm_wday .

Si se alcanza el iterador final antes de leer un nombre de día de la semana 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 más allá 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 a 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 día de la semana 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 <initializer_list>
#include <iostream>
#include <iterator>
#include <locale>
#include <sstream>
#include <string_view>
void try_get_wday(std::string_view s)
{
    std::cout << "Analizando el día de la semana de '" << s
              << "' en la configuración regional " << 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 << "Análisis exitoso, el número del día de la semana es " << t.tm_wday;
        if (ret != last)
        {
            std::cout << " Contenido restante: ";
            std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout));
        }
        else
            std::cout << " la entrada fue completamente consumida";
    }
    else
    {
        std::cout << "Análisis fallido. Cadena no analizada: ";
        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 << "No se puede configurar la configuración regional: " << locale_name << "\n"
                     "Excepción: " << 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", {"土曜日"});
}

Salida posible:

Analizando el día de la semana de 'Št' en la configuración regional lt_LT.utf8
Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente
Analizando el día de la semana de 'Šeštadienis' en la configuración regional lt_LT.utf8
Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente
Analizando el día de la semana de 'SATELLITE' en la configuración regional en_US.utf8
Analizado exitosamente, el número del día de la semana es 6 Contenido restante: ELLITE
Analizando el día de la semana de '土曜日' en la configuración regional ja_JP.utf8
Analizado exitosamente, el número del día de la semana es 6 la entrada fue consumida completamente

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 día de la semana válido

Véase también

(C++11)
analiza un valor de fecha/hora con formato especificado
(plantilla de función)