std::time_get<CharT,InputIt>:: get, std::time_get<CharT,InputIt>:: do_get
|
Definido en el encabezado
<locale>
|
||
|
public
:
iter_type get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(1) | (desde C++11) |
|
protected
:
virtual
iter_type do_get
(
iter_type beg, iter_type end,
std::
ios_base
&
str,
|
(2) | (desde C++11) |
do_get
. La función
get
realiza lo siguiente:
Primero, limpia los bits de error en
err
ejecutando
err
=
std::
ios_base
::
goodbit
. Luego entra en un bucle, que termina cuando cualquiera de las siguientes condiciones se vuelve verdadera (verificadas en este orden):
eofbit
como
failbit
en
err
.
-
- En el cuerpo del bucle, se llevan a cabo los siguientes pasos:
%
y el carácter de formato, si está presente). Si no hay modificador, se utiliza el valor
'
\0
'
. Si la cadena de formato es ambigua o termina demasiado pronto para determinar el especificador de conversión después de
'%'
,
eofbit
se establece en
err
y el bucle termina. Si, después de la llamada a
do_get
, no se establecen bits de error en
err
, la función incrementa
fmtbeg
para que apunte justo después del especificador de conversión y continúa el bucle.
failbit
en
err
.
-
-
Primero, limpia los bits de error en
err
ejecutando
err
=
std::
ios_base
::
goodbit
. Luego lee caracteres de la secuencia de entrada
[
beg, end
)
que son esperados por el especificador de formato
std::time_get
formado al combinar
'%'
,
modifier
(si no es
'
\0
'
), y
format
. Si los caracteres no se combinan para formar un especificador de conversión válido, establece
failbiten err . Si se alcanza el final del flujo de entrada después de leer un carácter, estableceeofbiten err . Si la cadena de entrada fue analizada exitosamente, actualiza los campos correspondientes de * t .
-
Primero, limpia los bits de error en
err
ejecutando
err
=
std::
ios_base
::
goodbit
. Luego lee caracteres de la secuencia de entrada
[
beg, end
)
que son esperados por el especificador de formato
std::time_get
formado al combinar
'%'
,
modifier
(si no es
'
\0
'
), y
format
. Si los caracteres no se combinan para formar un especificador de conversión válido, establece
-
-
Para especificadores de conversión complejos, como
'%x'
o
'%c'
, o las directivas que utilizan los modificadores
'E'
y
'O'
, la función puede fallar al determinar algunos de los valores a almacenar en
*
t
. En tal caso, establece
eofbiten err y deja estos campos en estado no especificado.
-
Para especificadores de conversión complejos, como
'%x'
o
'%c'
, o las directivas que utilizan los modificadores
'E'
y
'O'
, la función puede fallar al determinar algunos de los valores a almacenar en
*
t
. En tal caso, establece
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 |
| fmtbeg | - |
puntero al primer carácter de una secuencia de caracteres
char_type
que especifica el formato de conversión (ver abajo)
|
| fmtend | - |
puntero una posición después del último carácter de una secuencia de caracteres
char_type
que especifica el formato de conversión
|
| format | - | el carácter que nombra un especificador de conversión |
| modifier | - |
el modificador opcional que puede aparecer entre
%
y el especificador de conversión
|
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 espacios en blanco arbitrarios 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, p.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 de 1969 a 1999, el rango
[00,68]
produce 2000-2068
|
tm_year
|
Oy
|
analiza los últimos 2 dígitos del año usando 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 configuración regional
%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, por ejemplo
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 iniciales 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 iniciales 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 iniciales 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, por ejemplo 六 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 el minuto utilizando el sistema numérico alternativo, por ejemplo 二十五 se analiza como 25 en la configuración regional ja_JP |
tm_min
|
S
|
analiza el
segundo
como un número decimal (rango
[00,60]
), se permiten ceros iniciales pero no son obligatorios
|
tm_sec
|
OS
|
analiza el segundo utilizando el sistema numérico alternativo, por ejemplo, 二十四 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 estándar de fecha de la configuración regional | todos |
Ex
|
analiza la representación de fecha alternativa 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 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
Iterador que apunta una posición después del último carácter en [ beg, end ) que fue analizado exitosamente.
Notas
La comparación que no distingue entre mayúsculas y minúsculas para los caracteres que no son espacios en blanco ni '%' en la cadena de formato, normalmente, pero no necesariamente, se utiliza el facet std::collate de la configuración regional proporcionada por str .
Si se encuentra un error de análisis, muchas implementaciones de esta función dejan * t completamente intacto.
No está especificado si estas funciones ponen a cero los campos en
*
t
que no establecen directamente: los programas portables deben inicializar cada campo a cero antes de llamar a
get()
.
Ejemplo
#include <iomanip> #include <iostream> #include <locale> #include <sstream> int main() { std::istringstream ss("2026-März-12 23:45:56"); ss.imbue(std::locale("de_DE.utf8")); auto& f = std::use_facet<std::time_get<char>>(ss.getloc()); std::tm t{}; std::string s = "%Y-%b-%d %H:%M:%S"; std::ios_base::iostate err = std::ios_base::goodbit; auto ret = f.get({ss}, {}, ss, err, &t, &s[0], &s[0] + s.size()); ss.setstate(err); std::istreambuf_iterator<char> last{}; if (ss) { std::cout << "Successfully parsed as " << std::put_time(&t, "%c") << '\n'; 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.\nUnparsed string: "; std::copy(ret, last, std::ostreambuf_iterator<char>(std::cout)); } std::cout << '\n'; }
Salida:
Successfully parsed as Sun Mar 12 23:45:56 2026 The input was fully consumed.
Véase también
|
(C++11)
|
analiza un valor de fecha/hora con formato especificado
(plantilla de función) |