Namespaces
Variants

std:: put_time

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

Cuando se utiliza en una expresión out << put_time ( tmb, fmt ) , convierte la información de fecha y hora de un tiempo calendario dado tmb a una cadena de caracteres de acuerdo con la cadena de formato fmt , como si se llamara a std::strftime , std::wcsftime , o análogo (dependiendo de CharT ), según la faceta std::time_put de la configuración regional actualmente imbricada en el flujo de salida out .

Contenidos

Parámetros

tmb - puntero a la estructura de tiempo de calendario como se obtiene de std::localtime o std::gmtime
fmt - puntero a una cadena CharT terminada en nulo que especifica el formato 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, p.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 un 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 usando 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 con %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 utilizando 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 utilizando 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 cadena de fecha y hora estándar , ej. 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 alternativa de fecha , 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 , ej. 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 (ej. -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

Un objeto de tipo no especificado tal que

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

donde la función f se define como:

template<class CharT, class Traits>
void f(std::basic_ios<CharT, Traits>& str, const std::tm* tmb, const CharT* fmt)
{
    using Iter = std::ostreambuf_iterator<CharT, Traits>;
    using TimePut = std::time_put<CharT, Iter>;
    const TimePut& tp = std::use_facet<TimePut>(str.getloc());
    const Iter end = tp.put(Iter(str.rdbuf()), str, str.fill(), tmb,
        fmt, fmt + Traits::length(fmt));
    if (end.failed())
        str.setstate(std::ios_base::badbit);
}

Ejemplo

#include <ctime>
#include <iomanip>
#include <iostream>
int main()
{
    std::time_t t = std::time(nullptr);
    std::tm tm = *std::localtime(&t);
    std::cout.imbue(std::locale("ru_RU.utf8"));
    std::cout << "ru_RU: " << std::put_time(&tm, "%c %Z") << '\n';
    std::cout.imbue(std::locale("ja_JP.utf8"));
    std::cout << "ja_JP: " << std::put_time(&tm, "%c %Z") << '\n';
}

Salida posible:

ru_RU: Ср. 28 дек. 2011 10:21:16 EST
ja_JP: 2011年12月28日 10時21分16秒 EST

Véase también

formatea el contenido de std::tm para salida como secuencia de caracteres
(plantilla de clase)
(C++11)
analiza un valor de fecha/hora de formato especificado
(plantilla de función)
convierte un objeto std::tm a representación textual personalizada
(función)
convierte un objeto std::tm a representación textual de cadena ancha personalizada
(función)