Namespaces
Variants

std:: get_time

From cppreference.net
< cpp ‎ | io ‎ | manip
Definido en el encabezado <iomanip>
template < class CharT >
/*unspecified*/ get_time ( std:: tm * tmb, const CharT * fmt ) ;
(desde C++11)

Cuando se utiliza en una expresión in >> get_time ( tmb, fmt ) , analiza la entrada de caracteres como un valor de fecha/hora según la cadena de formato fmt de acuerdo con la faceta std::time_get de la configuración regional actualmente imbricada en el flujo de entrada in . El valor resultante se almacena en un objeto std::tm apuntado por tmb .

Contenidos

Parámetros

tmb - puntero válido al std::tm objeto donde se almacenará el resultado
fmt - pointer to a null-terminated CharT string specifying the conversion format

La cadena de formato consiste en cero o más especificadores de conversión, caracteres de espacio en blanco y caracteres ordinarios (excepto % ). Se espera que cada carácter ordinario coincida con un carácter en el flujo de entrada en comparación sin distinción entre mayúsculas y minúsculas. Cada carácter de espacio en blanco coincide con cualquier espacio en blanco en la cadena de entrada. Cada especificación de conversión comienza con el carácter % , opcionalmente seguido por el modificador E o O (ignorado si no es compatible con la configuración regional), seguido del carácter que determina el comportamiento del especificador. Los especificadores de formato coinciden con la función POSIX strptime() :

Especificador de
conversión
Explicación Escribe en campos
% coincide con un literal % . La especificación de conversión completa debe ser %% (ninguno)
t coincide con cualquier espacio en blanco (ninguno)
n coincide con cualquier espacio en blanco (ninguno)
Año
Y analiza el año completo como un número decimal de 4 dígitos, se permiten ceros a la izquierda pero no son obligatorios tm_year
EY analiza el año en la representación alternativa, ej. 平成23年 (año Heisei 23) que escribe 2011 en tm_year en la configuración regional ja_JP tm_year
y analiza los últimos 2 dígitos del año como número decimal. El rango [69,99] produce valores 1969 a 1999, el rango [00,68] produce 2000-2068 tm_year
Oy analiza los últimos 2 dígitos del año utilizando el sistema numérico alternativo, por ejemplo 十一 se analiza como 11 en la configuración regional ja_JP tm_year
Ey analiza el año como desplazamiento desde el período del calendario alternativo de la localización %EC tm_year
C analiza los primeros 2 dígitos del año como un número decimal (rango [00,99] ) tm_year
EC analiza el nombre del año base (período) en la representación alternativa de la configuración regional, por ejemplo 平成 (era Heisei) en ja_JP tm_year
Mes
b analiza el nombre del mes, completo o abreviado, ej. Oct tm_mon
h sinónimo de b tm_mon
B sinónimo de b tm_mon
m analiza el mes como un número decimal (rango [01,12] ), se permiten ceros a la izquierda pero no son obligatorios tm_mon
Om analiza el mes utilizando el sistema numérico alternativo, ej. 十二 se analiza como 12 en la configuración regional ja_JP tm_mon
Semana
U analiza la semana del año como un número decimal (el domingo es el primer día de la semana) (rango [00,53] ), se permiten ceros a la izquierda pero no son obligatorios tm_year , tm_wday , tm_yday
OU analiza la semana del año , como lo hace %U , utilizando el sistema numérico alternativo, p.ej. 五十二 se analiza como 52 en la configuración regional ja_JP tm_year , tm_wday , tm_yday
W analiza la semana del año como un número decimal (el lunes es el primer día de la semana) (rango [00,53] ), se permiten ceros iniciales pero no son obligatorios tm_year , tm_wday , tm_yday
OW analiza la semana del año , como lo hace %W , utilizando el sistema numérico alternativo, p.ej. 五十二 se analiza como 52 en la configuración regional ja_JP tm_year , tm_wday , tm_yday
Día del año/mes
j analiza el día del año como un número decimal (rango [001,366] ), se permiten ceros a la izquierda pero no son obligatorios tm_yday
d analiza el día del mes como un número decimal (rango [01,31] ), se permiten ceros a la izquierda pero no son obligatorios tm_mday
Od analiza el día del mes utilizando el sistema numérico alternativo, p.ej. 二十七 se analiza como 27 en la configuración regional ja_JP, se permiten ceros iniciales pero no son obligatorios tm_mday
e sinónimo de d tm_mday
Oe sinónimo de Od tm_mday
Día de la semana
a analiza el nombre del día de la semana, completo o abreviado, por ejemplo Fri tm_wday
A sinónimo de a tm_wday
w analiza el día de la semana como un número decimal, donde el domingo es 0 (rango [0-6] ) tm_wday
Ow analiza el día de la semana como un número decimal, donde el domingo es 0 , utilizando el sistema numérico alternativo, por ejemplo, 二 se analiza como 2 en la configuración regional ja_JP tm_wday
Hora, minuto, segundo
H analiza la hora como un número decimal, reloj de 24 horas (rango [00-23] ), se permiten ceros a la izquierda pero no son obligatorios tm_hour
OH analiza la hora del reloj de 24 horas utilizando el sistema numérico alternativo, por ejemplo 十八 se analiza como 18 en la configuración regional ja_JP tm_hour
I analiza hour como un número decimal, reloj de 12 horas (rango [01,12] ), se permiten ceros a la izquierda pero no son obligatorios tm_hour
OI analiza la hora del reloj de 12 horas utilizando el sistema numérico alternativo, ej. 六 se lee como 06 en la configuración regional ja_JP tm_hour
M analiza el minuto como un número decimal (rango [00,59] ), se permiten ceros a la izquierda pero no son obligatorios tm_min
OM analiza minute utilizando el sistema numérico alternativo, por ejemplo 二十五 se analiza como 25 en la configuración regional ja_JP tm_min
S interpreta el segundo como un número decimal (rango [00,60] ), se permiten ceros a la izquierda pero no son obligatorios tm_sec
OS analiza el segundo utilizando el sistema numérico alternativo, e.g. 二十四 se analiza como 24 en la configuración regional ja_JP tm_sec
Otros
c analiza el formato estándar de cadena de fecha y hora de la configuración regional, por ejemplo Sun Oct 17 04:41:13 2010 (dependiente de la configuración regional) todos
Ec analiza el formato alternativo de cadena de fecha y hora de la configuración regional, por ejemplo, esperando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP todos
x analiza la representación de fecha estándar de la configuración regional todos
Ex analiza la representación alternativa de fecha del locale, por ejemplo esperando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en el locale ja_JP todos
X analiza la representación estándar de hora de la configuración regional todos
EX analiza la representación alternativa de tiempo de la configuración regional todos
D equivalente a "%m / %d / %y " tm_mon , tm_mday , tm_year
r analiza la hora estándar de 12 horas de la configuración regional (en POSIX, "%I : %M : %S %p" ) tm_hour , tm_min , tm_sec
R equivalente a "%H : %M" tm_hour , tm_min
T equivalente a "%H : %M : %S" tm_hour , tm_min , tm_sec
p analiza el equivalente local de a.m. o p.m. tm_hour

Nota: tm_isdst no se escribe, y debe establecerse explícitamente para su uso con funciones como mktime


Valor de retorno

Un objeto de tipo no especificado tal que

  • si in es un objeto de tipo std:: basic_istream < CharT, Traits > , la expresión in >> get_time ( tmb, fmt )
    • tiene tipo std:: basic_istream < CharT, Traits > &
    • tiene valor in
    • se comporta como si llamara a f ( in, tmb, fmt )

donde la función f se define como:

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, std::tm* tmb, const CharT* fmt)
{
    using Iter = std::istreambuf_iterator<CharT, Traits>;
    using TimeGet = time_get<CharT, Iter>;
    std::ios_base::iostate err = std::ios_base::goodbit;
    const TimeGet& tg = std::use_facet<TimeGet>(str.getloc());
    tg.get(Iter(str.rdbuf()), Iter(), str, err, tmb,
        fmt, fmt + Traits::length(fmt));
    if (err != std::ios_base::goodbit)
        str.setstate(err);
}

Notas

Como se especifica en std::time_get::do_get , que esta función llama, no está especificado si esta función pone a cero los campos en * tmb que no se establecen directamente por los especificadores de conversión que aparecen en fmt : los programas portables deben inicializar cada campo de * tmb a cero antes de llamar a std::get_time .

Ejemplo

Nota: elija clang o gcc >= 12.1 para observar la salida. libstdc++ anterior a 12.1 no implementa correctamente el % b especificador: bug #78714 .

#include <iomanip>
#include <iostream>
#include <locale>
#include <sstream>
int main()
{
    std::tm t = {};
    std::istringstream ss("2011-Februar-18 23:12:34");
    ss.imbue(std::locale("de_DE.utf-8"));
    ss >> std::get_time(&t, "%Y-%b-%d %H:%M:%S");
    if (ss.fail())
        std::cout << "Parse failed\n";
    else
        std::cout << std::put_time(&t, "%c") << '\n';
}

Salida posible:

Sun Feb 18 23:12:34 2011

Véase también

analiza valores de fecha/hora desde una secuencia de caracteres de entrada hacia std::tm
(plantilla de clase)
(C++11)
formatea y genera un valor de fecha/hora de acuerdo al formato especificado
(plantilla de función)
(C++20)
analiza un objeto chrono desde un flujo
(plantilla de función)