std::chrono:: parse
|
Definido en el encabezado
<chrono>
|
||
|
template
<
class
CharT,
class
Parsable
>
/* sin especificar */ parse ( const CharT * fmt, Parsable & tp ) ; |
(1) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* no especificado */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(2) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* no especificado */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(3) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* no especificado */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(4) | (desde C++20) |
|
template
<
class
CharT,
class
Parsable
>
/* no especificado */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(5) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* sin especificar */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(6) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* no especificado */
parse
(
const
CharT
*
fmt, Parsable
&
tp,
|
(7) | (desde C++20) |
|
template
<
class
CharT,
class
Traits,
class
Alloc,
class
Parsable
>
/* no especificado */
parse
(
const
std::
basic_string
<
CharT, Traits, Alloc
>
&
fmt,
|
(8) | (desde C++20) |
Retorna un objeto
manip
de tipo no especificado tal que, dado un objeto
std::
basic_istream
<
CharT, Traits
>
is
, la expresión
is
>>
manip
llama a
from_stream
(sin calificar, para habilitar la
búsqueda dependiente de argumentos
) como sigue:
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
static_cast < std:: basic_string < CharT, Traits, Alloc > * > ( nullptr ) , & offset )
La expresión
is
>>
manip
es un lvalue de tipo
std::
basic_istream
<
CharT, Traits
>
con el valor
is
.
Estas sobrecargas participan en la resolución de sobrecarga solo si la expresión
from_stream
correspondiente está bien formada.
Se recomienda a las implementaciones que dificulten el uso de referencias potencialmente colgantes al string de formato, por ejemplo, haciendo que los tipos de retorno no sean movibles e impidiendo que operator >> acepte lvalues de tipos de retorno.
Contenidos |
Parámetros
| fmt | - | una cadena de formato (ver abajo) |
| tp | - | objeto para almacenar el resultado del análisis |
| abbrev | - |
cadena para almacenar la abreviatura o nombre de la zona horaria correspondiente al
%Z
especificador
|
| offset | - |
duración para representar el desplazamiento desde UTC correspondiente al
%z
especificador
|
Cadena de formato
La cadena de formato consiste en cero o más especificadores de conversión y caracteres ordinarios. Cada carácter ordinario, excluyendo los caracteres de espacio en blanco y el carácter nulo de terminación, coincide con un carácter idéntico del flujo de entrada, o hace que la función falle si el siguiente carácter en el flujo no es igual al comparar.
Cada carácter de espacio en blanco coincide con cero o más caracteres de espacio en blanco en el flujo de entrada.
Cada especificador de conversión sin modificar comienza con un
%
carácter seguido de un carácter que determina el comportamiento del especificador. Algunos especificadores de conversión tienen una forma modificada en la que un
E
o
O
carácter modificador se inserta después del
%
carácter. Algunos especificadores de conversión tienen una forma modificada en la que un parámetro de ancho dado como un entero decimal positivo (mostrado como
N
abajo) se inserta después del
%
carácter. Cada especificador de conversión hace que los caracteres coincidentes se interpreten como partes de tipos de fecha y hora según la tabla siguiente.
Una secuencia de caracteres en la cadena de formato que comienza con un
%
pero no coincide con uno de los especificadores de conversión a continuación se interpreta como caracteres ordinarios.
Si
from_stream
no logra analizar todo lo especificado por la cadena de formato, o si se analiza información insuficiente para especificar un resultado completo, o si el análisis revela información contradictoria,
is.
setstate
(
std::
ios_base
::
failbit
)
es llamado.
Los siguientes especificadores de conversión están disponibles:
|
Especificador
de conversión |
Explicación | |
|---|---|---|
%%
|
Coincide con un carácter
%
literal.
|
|
%n
|
Coincide con un carácter de espacio en blanco. | |
%t
|
Coincide con cero o un carácter de espacio en blanco. | |
| Año | ||
%C
%
N
C
%EC
|
Analiza el siglo como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%y
%
N
y
%Ey
%Oy
|
Analiza los dos últimos dígitos decimales del año. Si el siglo no se especifica de otra manera (por ejemplo, con %C), se presume que los valores en el rango [69, 99] se refieren a los años 1969 a 1999, y los valores en el rango [00, 68] se refieren a los años 2000 a 2068. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
Los comandos modificados
|
|
%Y
%
N
Y
%EY
|
Analiza el año como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 4. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
| Mes | ||
%b
%B
%h
|
Analiza el nombre completo o abreviado del mes, sin distinción entre mayúsculas y minúsculas, según la configuración regional. | |
%m
%
N
m
%Om
|
Analiza el mes como un número decimal (enero es
1
). El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros iniciales pero no son obligatorios.
El comando modificado
|
|
| Día | ||
%d
%
N
d
%Od
%e
%
N
e
%Oe
|
Analiza el día del mes como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
Los comandos modificados
|
|
| Día de la semana | ||
%a
%A
|
Analiza el nombre completo o abreviado del día de la semana, sin distinción entre mayúsculas y minúsculas, según la configuración regional. | |
%u
%
N
u
|
Analiza el día de la semana ISO como un número decimal (1-7), donde el lunes es
1
. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 1. Se permiten ceros a la izquierda pero no son obligatorios.
|
|
%w
%
N
w
%Ow
|
Analiza el día de la semana como un número decimal (0-6), donde el domingo es
0
. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 1. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
| Año basado en semanas ISO 8601 | ||
|
En la norma ISO 8601 las semanas comienzan el lunes y la primera semana del año debe cumplir los siguientes requisitos:
|
||
%g
%
N
g
|
Analiza los dos últimos dígitos decimales del año basado en semanas ISO 8601. El ancho N especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios. | |
%G
%
N
G
|
Analiza el año basado en semanas ISO 8601 como un número decimal. El ancho N especifica el número máximo de caracteres a leer. El ancho predeterminado es 4. Se permiten ceros a la izquierda pero no son obligatorios. | |
%V
%
N
V
|
Analiza la semana ISO 8601 del año como un número decimal. El ancho N especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios. | |
| Semana/día del año | ||
%j
%
N
j
|
Analiza el día del año como un número decimal (1 de enero es
1
). El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 3. Se permiten ceros a la izquierda pero no son obligatorios.
|
|
%U
%
N
U
%OU
|
Analiza el número de semana del año como un número decimal. El primer domingo del año es el primer día de la semana 01. Los días del mismo año anteriores a ese están en la semana 00. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%W
%
N
W
%OW
|
Analiza el número de la semana del año como un número decimal. El primer lunes del año es el primer día de la semana 01. Los días del mismo año anteriores a ese están en la semana 00. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
| Fecha | ||
%D
|
Equivalente a
"%m/%d/%y"
.
|
|
%F
%
N
F
|
Equivalente a
"%Y-%m-%d"
. Si se especifica el ancho, solo se aplica al
%Y
.
|
|
%x
%Ex
|
Analiza la representación de fecha de la configuración regional.
El comando modificado
|
|
| Hora del día | ||
%H
%
N
H
%OH
|
Analiza la hora (reloj de 24 horas) como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%I
%
N
I
%OI
|
Analiza la hora (reloj de 12 horas) como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%M
%
N
M
%OM
|
Analiza el minuto como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%S
%
N
S
%OS
|
Analiza el segundo como un número decimal. El ancho
N
especifica el número máximo de caracteres a leer. El ancho predeterminado es 2. Se permiten ceros a la izquierda pero no son obligatorios.
El comando modificado
|
|
%p
|
Analiza los equivalentes regionales de las designaciones AM/PM asociadas con un reloj de 12 horas. | |
%R
|
Equivalente a
"%H:%M"
.
|
|
%T
|
Equivalente a
"%H:%M:%S"
.
|
|
%r
|
Analiza la hora del reloj de 12 horas de la configuración regional. | |
%X
%EX
|
Analiza la representación de hora de la configuración regional.
El comando modificado
|
|
| Miscelánea | ||
%c
%Ec
|
Analiza la representación de fecha y hora de la configuración regional.
El comando modificado
|
|
%z
%Ez
%Oz
|
Analiza el desplazamiento de UTC en el formato
[+|-]hh[mm]
. Por ejemplo,
-0430
se refiere a 4 horas 30 minutos detrás de UTC y
04
se refiere a 4 horas adelante de UTC.
Los comandos modificados
|
|
%Z
|
Analiza la abreviatura o nombre de la zona horaria, tomada como la secuencia más larga de caracteres que solo contiene los caracteres
A
a
Z
,
a
a
z
,
0
a
9
,
-
,
+
,
_
, y
/
.
|
|
Ejemplo
#include <chrono> #include <iostream> #include <locale> #include <sstream> int main() { auto parse = [&](auto str, auto fmt, auto o) { std::istringstream is{str}; is.imbue(std::locale("en_US.utf-8")); is >> std::chrono::parse(fmt, o); is.fail() ? std::cout << "Parse failed!\n" : std::cout << o << '\n'; }; parse("01:02:03", "%H:%M:%S", std::chrono::hours{}); parse("01:02:03", "%H:%M:%S", std::chrono::minutes{}); parse("01:02:03", "%H:%M:%S", std::chrono::seconds{}); }
Salida posible:
1h 62min 3723s
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 3554 | C++20 | faltaban las sobrecargas para secuencias de tipo carácter simples terminadas en nulo | añadidas |
Véase también
analiza un
sys_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
analiza un
utc_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
analiza un
tai_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
analiza un
gps_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
analiza un
file_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
analiza un
local_time
de un flujo según el formato proporcionado
(plantilla de función) |
|
|
(C++20)
|
analiza un
year
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
month
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
day
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
weekday
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
month_day
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
year_month
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++20)
|
analiza un
year_month_day
de un flujo según el formato proporcionado
(plantilla de función) |
|
(C++11)
|
analiza un valor de fecha/hora de formato especificado
(plantilla de función) |