Namespaces
Variants

std::time_put<CharT,OutputIt>:: put, std::time_put<CharT,OutputIt>:: do_put

From cppreference.net
std::time_put
Member functions
time_put::put time_put::do_put
Definido en el encabezado <locale>
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

const CharT * fmtbeg, const CharT * fmtend ) const ;
(1)
public :

iter_type put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier = 0 ) const ;
(2)
protected :

virtual iter_type do_put ( iter_type out, std:: ios_base & str,
char_type fill, const std:: tm * t,

char format, char modifier ) const ;
(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.

1) Recorre la secuencia de caracteres [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.
2) Llama a la función miembro do_put de la clase más derivada.
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 secuencia de conversión de formato formada al concatenar '%' , el valor de modifier si no es ' \0 ' , y el valor de format . El formato se interpreta de la misma manera que la función std::strftime , excepto que los formatos descritos como dependientes de la configuración regional se definen por esta localidad, y pueden admitirse especificadores de formato adicionales (el argumento fill se proporciona para que estos especificadores de formato definidos por la implementación los utilicen). La cadena se escribe en el iterador de salida out .

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:

  • Incluye el 4 de enero
  • Incluye el primer jueves del año
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:

  • Incluye el 4 de enero
  • Incluye el primer jueves del año
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:

  • Incluye el 4 de enero
  • Incluye el primer jueves del año
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> )