std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put
|
Definido en el encabezado
<locale>
|
||
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(1) | |
|
public
:
iter_type put
(
iter_type out,
std::
ios_base
&
str,
|
(2) | |
|
protected
:
virtual
iter_type do_put
(
iter_type out,
std::
ios_base
&
str,
|
(3) | |
Convierte la fecha y hora del calendario almacenadas en el objeto
std::tm
apuntado por
t
en una cadena de caracteres, de acuerdo con la
cadena de formato
[fmtbeg, fmtend)
. La cadena de formato es la misma utilizada por
std::
strftime
, pero cada especificador de formato es procesado por una llamada individual a
do_put()
, que puede ser personalizada extendiendo esta faceta.
[fmtbeg, fmtend)
, examinando los caracteres. Cada carácter que no forma parte de una secuencia de formato se escribe inmediatamente en el iterador de salida
out
. Para identificar secuencias de formato, esta función reduce el siguiente carácter
c
en
[fmtbeg, fmtend)
como si fuera mediante
std::
ctype
<
char_type
>
(
str.
getloc
(
)
)
.
narrow
(
c,
0
)
y si es igual a
'%'
, los siguientes uno o dos caracteres se comparan con la lista de secuencias de formato reconocidas por
std::strftime
más cualquier formato adicional definido por la implementación compatible con esta configuración regional. Para cada secuencia de formato válida, se realiza una llamada a
do_put
(
out, str, fill, t, format, modifier
)
, donde
format
es el carácter de la secuencia de formato, y
modifier
es el modificador opcional de la secuencia de formato (
'E'
o
'O'
). Se utiliza un valor de
'
\0
'
si el modificador está ausente.
do_put
de la clase más derivada.
Contenidos |
Parámetros
| out | - | iterador de salida donde se escribe el resultado de la conversión |
| str | - | objeto de flujo que esta función utiliza para obtener facetas de configuración regional cuando es necesario, ej. std::ctype para caracteres estrechos |
| t | - | puntero al objeto std::tm del cual se obtienen los valores de fecha/hora |
| fmtbeg | - |
puntero al primer carácter de una secuencia de caracteres
char_type
que especifica el
formato de conversión
|
| fmtend | - |
puntero un elemento después del último carácter de una secuencia de caracteres
char_type
que especifica el
formato de conversión
|
| fill | - | carácter de relleno (generalmente espacio) |
| 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
|
Cadena de formato
La cadena de formato consiste en cero o más especificadores de conversión y caracteres ordinarios (excepto
%
). Todos los caracteres ordinarios, incluido el carácter nulo terminador, se copian a la cadena de salida sin modificación. 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 siguientes especificadores de formato están disponibles:
|
Especificador
de conversión |
Explicación | Campos utilizados |
|---|---|---|
%
|
escribe literalmente
%
. La especificación de conversión completa debe ser
%%
.
|
|
n
(C++11) |
escribe el carácter de nueva línea | |
t
(C++11) |
escribe el carácter de tabulación horizontal | |
| Año | ||
Y
|
escribe el año como un número decimal, ej. 2017 |
tm_year
|
EY
(C++11) |
escribe el año en representación alternativa, ej. 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP |
tm_year
|
y
|
escribe los últimos 2 dígitos del
año
como número decimal (rango
[00,99]
)
|
tm_year
|
Oy
(C++11) |
escribe los últimos 2 dígitos del año usando el sistema numérico alternativo, por ejemplo 十一 en lugar de 11 en la configuración regional ja_JP |
tm_year
|
Ey
(C++11) |
escribe el
año
como desplazamiento desde el período del calendario alternativo de la localización
%EC
(dependiente de la localización)
|
tm_year
|
C
(C++11) |
escribe los primeros 2 dígitos del
año
como un número decimal (rango
[00,99]
)
|
tm_year
|
EC
(C++11) |
escribe el nombre del año base (periodo) en la representación alternativa de la configuración regional, por ejemplo 平成 (era Heisei) en ja_JP |
tm_year
|
G
(C++11) |
escribe el
año basado en semanas ISO 8601
, es decir, el año que contiene la semana especificada.
En ISO 8601 las semanas comienzan el lunes y la primera semana del año debe cumplir los siguientes requisitos:
|
tm_year
,
tm_wday
,
tm_yday
|
g
(C++11) |
escribe los últimos 2 dígitos del
año basado en semanas ISO 8601
, es decir, el año que contiene la semana especificada (rango
[00,99]
).
En ISO 8601 las semanas comienzan el lunes y la primera semana del año debe cumplir los siguientes requisitos:
|
tm_year
,
tm_wday
,
tm_yday
|
| Mes | ||
b
|
escribe el
nombre del mes abreviado
, ej.
Oct
(dependiente de la configuración regional)
|
tm_mon
|
h
(C++11) |
sinónimo de
b
|
tm_mon
|
B
|
escribe el
nombre completo del mes
, ej.
October
(dependiente de la configuración regional)
|
tm_mon
|
m
|
escribe el
mes
como un número decimal (rango
[01,12]
)
|
tm_mon
|
Om
(C++11) |
escribe el mes utilizando el sistema numérico alternativo, por ejemplo 十二 en lugar de 12 en la configuración regional ja_JP |
tm_mon
|
| Semana | ||
U
|
escribe la
semana del año
como número decimal (el domingo es el primer día de la semana) (rango
[00,53]
)
|
tm_year
,
tm_wday
,
tm_yday
|
OU
(C++11) |
escribe la
semana del año
, como por
%U
, usando el sistema numérico alternativo, ej. 五十二 en lugar de 52 en la configuración regional ja_JP
|
tm_year
,
tm_wday
,
tm_yday
|
W
|
escribe la
semana del año
como número decimal (el lunes es el primer día de la semana) (rango
[00,53]
)
|
tm_year
,
tm_wday
,
tm_yday
|
OW
(C++11) |
escribe la
semana del año
, como por
%W
, usando el sistema numérico alternativo, ej. 五十二 en lugar de 52 en la configuración regional ja_JP
|
tm_year
,
tm_wday
,
tm_yday
|
V
(C++11) |
escribe la
semana ISO 8601 del año
(rango
[01,53]
).
En ISO 8601 las semanas comienzan el lunes y la primera semana del año debe cumplir los siguientes requisitos:
|
tm_year
,
tm_wday
,
tm_yday
|
OV
(C++11) |
escribe la
semana del año
, como por
%V
, usando el sistema numérico alternativo, ej. 五十二 en lugar de 52 en la configuración regional ja_JP
|
tm_year
,
tm_wday
,
tm_yday
|
| Día del año/mes | ||
j
|
escribe el
día del año
como un número decimal (rango
[001,366]
)
|
tm_yday
|
d
|
escribe el
día del mes
como un número decimal (rango
[01,31]
)
|
tm_mday
|
Od
(C++11) |
escribe el
día del mes
basado en cero usando el sistema numérico alternativo, por ejemplo, 二十七 en lugar de 27 en la configuración regional ja_JP
Un solo carácter va precedido por un espacio. |
tm_mday
|
e
(C++11) |
escribe el
día del mes
como un número decimal (rango
[1,31]
).
Los dígitos individuales van precedidos por un espacio. |
tm_mday
|
Oe
(C++11) |
escribe el
día del mes
basado en uno usando el sistema numérico alternativo, por ejemplo 二十七 en lugar de 27 en la configuración regional ja_JP
Un solo carácter va precedido por un espacio. |
tm_mday
|
| Día de la semana | ||
a
|
escribe el
nombre abreviado del día de la semana
, ej.
Fri
(dependiente de la configuración regional)
|
tm_wday
|
A
|
escribe el
nombre completo del día de la semana
, ej.
Friday
(dependiente de la configuración regional)
|
tm_wday
|
w
|
escribe el
día de la semana
como un número decimal, donde el domingo es
0
(rango
[0-6]
)
|
tm_wday
|
Ow
(C++11) |
escribe el
día de la semana
, donde el domingo es
0
, usando el sistema numérico alternativo, por ejemplo 二 en lugar de 2 en la configuración regional ja_JP
|
tm_wday
|
u
(C++11) |
escribe el
día de la semana
como un número decimal, donde el lunes es
1
(formato ISO 8601) (rango
[1-7]
)
|
tm_wday
|
Ou
(C++11) |
escribe el
día de la semana
, donde el lunes es
1
, usando el sistema numérico alternativo, por ejemplo 二 en lugar de 2 en la configuración regional ja_JP
|
tm_wday
|
| Hora, minuto, segundo | ||
H
|
escribe la
hora
como número decimal, reloj de 24 horas (rango
[00-23]
)
|
tm_hour
|
OH
(C++11) |
escribe la hora del reloj de 24 horas utilizando el sistema numérico alternativo, por ejemplo 十八 en lugar de 18 en la configuración regional ja_JP |
tm_hour
|
I
|
escribe
hour
como un número decimal, reloj de 12 horas (rango
[01,12]
)
|
tm_hour
|
OI
(C++11) |
escribe la hora del reloj de 12 horas usando el sistema numérico alternativo, por ejemplo 六 en lugar de 06 en la configuración regional ja_JP |
tm_hour
|
M
|
escribe el
minuto
como un número decimal (rango
[00,59]
)
|
tm_min
|
OM
(C++11) |
escribe el minuto usando el sistema numérico alternativo, por ejemplo 二十五 en lugar de 25 en la configuración regional ja_JP |
tm_min
|
S
|
escribe el
segundo
como un número decimal (rango
[00,60]
)
|
tm_sec
|
OS
(C++11) |
escribe el segundo usando el sistema numérico alternativo, por ejemplo 二十四 en lugar de 24 en la configuración regional ja_JP |
tm_sec
|
| Otros | ||
c
|
escribe la
cadena de fecha y hora estándar
, por ejemplo
Sun Oct 17 04:41:13 2010
(dependiente de la configuración regional)
|
todos |
Ec
(C++11) |
escribe cadena de fecha y hora alternativa , por ejemplo usando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP | todos |
x
|
escribe representación de fecha localizada (dependiente de la configuración regional) | todos |
Ex
(C++11) |
escribe representación de fecha alternativa , por ejemplo usando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP | todos |
X
|
escribe la representación localizada de la hora , por ejemplo 18:40:20 o 6:40:20 PM (dependiente de la configuración regional) | todos |
EX
(C++11) |
escribe representación alternativa de tiempo (dependiente de la configuración regional) | todos |
D
(C++11) |
equivalente a "%m/%d/%y" |
tm_mon
,
tm_mday
,
tm_year
|
F
(C++11) |
equivalente a "%Y-%m-%d" (el formato de fecha ISO 8601) |
tm_mon
,
tm_mday
,
tm_year
|
r
(C++11) |
escribe la hora en formato 12 horas localizado (dependiente de la configuración regional) |
tm_hour
,
tm_min
,
tm_sec
|
R
(C++11) |
equivalente a "%H:%M" |
tm_hour
,
tm_min
|
T
(C++11) |
equivalente a "%H:%M:%S" (el formato de hora ISO 8601) |
tm_hour
,
tm_min
,
tm_sec
|
p
|
escribe a.m. o p.m. localizado (dependiente de la configuración regional) |
tm_hour
|
z
(C++11) |
escribe el
desplazamiento de UTC
en formato ISO 8601 (por ejemplo
-0430
), o ningún carácter si la información de zona horaria no está disponible
|
tm_isdst
|
Z
|
escribe el nombre o abreviatura de la zona horaria dependiente de la configuración regional , o ningún carácter si la información de la zona horaria no está disponible |
tm_isdst
|
Valor de retorno
Iterador que apunta una posición después del último carácter que fue producido.
Notas
No se proporciona manejo de errores.
El
fill
carácter se proporciona para aquellos especificadores de formato definidos por la implementación y para las sobrecargas definidas por el usuario de
do_put()
que utilizan lógica de relleno y padding. Dichas implementaciones típicamente hacen uso de los flags de formato de
str
.
Ejemplo
#include <iostream> #include <sstream> #include <iomanip> #include <ctime> void try_time_put(const std::tm* t, const std::string& fmt) { std::cout.imbue(std::locale()); std::cout << "In the locale '" << std::cout.getloc().name() << "' : '"; std::use_facet<std::time_put<char>>(std::cout.getloc()).put( {std::cout}, std::cout, ' ', t, &fmt[0], &fmt[0] + fmt.size()); std::cout << "'\n"; } int main() { std::time_t t = std::time(NULL); std::tm tm = *std::localtime(&t); std::string fmt = "%c"; std::cout << "Using the format string '" << fmt << "' to format the time: " << std::ctime(&t) << '\n'; std::locale::global(std::locale("de_DE.utf8")); try_time_put(&tm, fmt); std::locale::global(std::locale("el_GR.utf8")); try_time_put(&tm, fmt); std::locale::global(std::locale("ja_JP.utf8")); try_time_put(&tm, fmt); }
Salida posible:
Using the format string '%c' to format the time: Mon Feb 11 22:58:50 2013 In the locale 'de_DE.utf8' : 'Mo 11 Feb 2013 23:02:38 EST' In the locale 'el_GR.utf8' : 'Δευ 11 Φεβ 2013 11:02:38 μμ EST' In the locale 'ja_JP.utf8' : '2013年02月11日 23時02分38秒'
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 164 | C++98 | el propósito del parámetro fill no estaba claro | aclarado |
Véase también
|
(C++11)
|
formatea y emite un valor de fecha/hora de acuerdo al formato especificado
(plantilla de función) |
|
[virtual]
(C++11)
|
extrae componentes de fecha/hora del flujo de entrada, según el formato especificado
(función miembro protegida virtual de
std::time_get<CharT,InputIt>
)
|