Namespaces
Variants

strftime

De es.cppreference.net
< c | chrono
Definido en el encabezado <time.h>
size_t strftime( char* str, size_t count,
                 const char* format, const struct tm* tp );
(hasta C99)
size_t strftime( char* restrict str, size_t count,
                 const char* restrict format, const struct tm* restrict tp );
(desde C99)

Convierte la información de fecha y hora de un tiempo calendario dado tp a una cadena de caracteres multibyte terminada en nulo str de acuerdo con cadena de formato format. Hasta count bytes se escriben.

Parámetros

str - puntero al primer elemento del arreglo de caracteres para la salida
count - número máximo de bytes a escribir
format - puntero a una cadena de caracteres multibyte terminada en nulo que especifica el formato de conversión
tp - puntero a un objeto struct tm que especifica la hora a formatear

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, incluyendo el carácter nulo de terminación, se copian a la cadena de salida sin modificación. Cada especificación de conversión comienza con el carácter %, opcionalmente seguido por E o O modificador (ignorado si no es soportado por la configuración regional), seguido por el carácter que determina el comportamiento del especificador. Los siguientes especificadores de formato están disponibles:

Conversión
especificador
Explicación Campos usados
% escribe literal %. La especificación de conversión completa debe ser %%.
n
(C99)
escribe el carácter de nueva línea
t
(C99)
escribe el carácter de tabulación horizontal
Año
Y escribe año como un número decimal, ej. 2017 tm_year
EY
(C99)
escribe año en la 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 de año como un número decimal (rango [00,99]) tm_year
Oy
(C99)
escribe los últimos 2 dígitos de año usando el sistema numérico alternativo, ej. 十一 en lugar de 11 en la configuración regional ja_JP tm_year
Ey
(C99)
escribe año como desfase del período del calendario alternativo de la configuración regional %EC (dependiente de la configuración regional) tm_year
C
(C99)
escribe los primeros 2 dígitos de año como un número decimal (rango [00,99]) tm_year
EC
(C99)
escribe el nombre del año base (período) en la representación alternativa de la configuración regional, ej. 平成 (era Heisei) en ja_JP tm_year
G
(C99)
escribe año basado en semana ISO 8601, es decir, el año que contiene la semana especificada.

En ISO 8601 las semanas comienzan en 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
(C99)
escribe los últimos 2 dígitos de año basado en semana ISO 8601, es decir, el año que contiene la semana especificada (rango [00,99]).

En ISO 8601 las semanas comienzan en 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 abreviatura del mes, ej. Oct (dependiente de la configuración regional) tm_mon
Ob
(C23)
escribe abreviatura del mes en la representación alternativa de la configuración regional tm_mon
h
(C99)
sinónimo de b tm_mon
B escribe nombre completo del mes, ej. October (dependiente de la configuración regional) tm_mon
OB
(C23)
escribe el nombre completo del mes apropiado en la representación alternativa de la configuración regional tm_mon
m escribe mes como un número decimal (rango [01,12]) tm_mon
Om
(C99)
escribe mes usando el sistema numérico alternativo, ej. 十二 en lugar de 12 en la configuración regional ja_JP tm_mon
Semana
U escribe semana del año como un número decimal (el domingo es el primer día de la semana) (rango [00,53]) tm_year, tm_wday, tm_yday
OU
(C99)
escribe 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 semana del año como un número decimal (el lunes es el primer día de la semana) (rango [00,53]) tm_year, tm_wday, tm_yday
OW
(C99)
escribe 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
(C99)
escribe semana ISO 8601 del año (rango [01,53]).

En ISO 8601 las semanas comienzan en 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
(C99)
escribe 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 día del año como un número decimal (rango [001,366]) tm_yday
d escribe día del mes como un número decimal (rango [01,31]) tm_mday
Od
(C99)
escribe el día del mes basado en cero usando el sistema numérico alternativo, ej. 二十七 en lugar de 27 en la configuración regional ja_JP

Un solo carácter está precedido por un espacio.

tm_mday
e
(C99)
escribe día del mes como un número decimal (rango [1,31]).

Un solo dígito está precedido por un espacio.

tm_mday
Oe
(C99)
escribe el día del mes basado en uno usando el sistema numérico alternativo, ej. 二十七 en lugar de 27 en la configuración regional ja_JP

Un solo carácter está precedido por un espacio.

tm_mday
Día de la semana
a escribe abreviatura del día de la semana, ej. Fri (dependiente de la configuración regional) tm_wday
A escribe nombre completo del día de la semana, ej. Friday (dependiente de la configuración regional) tm_wday
w escribe día de la semana como un número decimal, donde domingo es 0 (rango [0-6]) tm_wday
Ow
(C99)
escribe día de la semana, donde domingo es 0, usando el sistema numérico alternativo, ej. 二 en lugar de 2 en la configuración regional ja_JP tm_wday
u
(C99)
escribe día de la semana como un número decimal, donde lunes es 1 (formato ISO 8601) (rango [1-7]) tm_wday
Ou
(C99)
escribe día de la semana, donde lunes es 1, usando el sistema numérico alternativo, ej. 二 en lugar de 2 en la configuración regional ja_JP tm_wday
Hora, minuto, segundo
H escribe hora como un número decimal, formato de 24 horas (rango [00-23]) tm_hour
OH
(C99)
escribe hora del formato de 24 horas usando el sistema numérico alternativo, ej. 十八 en lugar de 18 en la configuración regional ja_JP tm_hour
I escribe hora como un número decimal, formato de 12 horas (rango [01,12]) tm_hour
OI
(C99)
escribe hora del formato de 12 horas usando el sistema numérico alternativo, ej. 六 en lugar de 06 en la configuración regional ja_JP tm_hour
M escribe minuto como un número decimal (rango [00,59]) tm_min
OM
(C99)
escribe minuto usando el sistema numérico alternativo, ej. 二十五 en lugar de 25 en la configuración regional ja_JP tm_min
S escribe segundo como un número decimal (rango [00,60]) tm_sec
OS
(C99)
escribe segundo usando el sistema numérico alternativo, ej. 二十四 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) all
Ec
(C99)
escribe cadena de fecha y hora alternativa, ej. usando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP all
x escribe la representación de fecha localizada (dependiente de la configuración regional) all
Ex
(C99)
escribe representación de fecha alternativa, ej. usando 平成23年 (año Heisei 23) en lugar de 2011年 (año 2011) en la configuración regional ja_JP all
X escribe la representación de hora localizada, ej. 18:40:20 o 6:40:20 PM (dependiente de la configuración regional) all
EX
(C99)
escribe representación de hora alternativa (dependiente de la configuración regional) all
D
(C99)
equivalente a "%m/%d/%y" tm_mon, tm_mday, tm_year
F
(C99)
equivalente a "%Y-%m-%d" (el formato de fecha ISO 8601) tm_mon, tm_mday, tm_year
r
(C99)
escribe la hora en formato de 12 horas localizada (dependiente de la configuración regional) tm_hour, tm_min, tm_sec
R
(C99)
equivalente a "%H:%M" tm_hour, tm_min
T
(C99)
equivalente a "%H:%M:%S" (el formato de hora ISO 8601) tm_hour, tm_min, tm_sec
p escribe a.m. o p.m. localizada (dependiente de la configuración regional) tm_hour
z
(C99)
escribe desfase de UTC en el 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 zona horaria no está disponible tm_isdst

Valor de retorno

El número de bytes escritos en el arreglo de caracteres apuntado por str sin incluir el '\0' de terminación en caso de éxito. Si count fue alcanzado antes de que toda la cadena pudiera almacenarse, se devuelve 0 y el contenido es indeterminado.

Ejemplo

#include <locale.h>
#include <stdio.h>
#include <time.h>

int main(void)
{
    char buff[70];
    struct tm my_time =
    {
        .tm_year = 112, // = year 2012
        .tm_mon = 9,    // = 10th month
        .tm_mday = 9,   // = 9th day
        .tm_hour = 8,   // = 8 hours
        .tm_min = 10,   // = 10 minutes
        .tm_sec = 20    // = 20 secs
    };

    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");

    setlocale(LC_TIME, "el_GR.utf8");

    if (strftime(buff, sizeof buff, "%A %c", &my_time))
        puts(buff);
    else
        puts("strftime failed");
}

Posible salida:

Sunday Sun Oct  9 08:10:20 2012
Κυριακή Κυρ 09 Οκτ 2012 08:10:20 πμ EST

Referencias

  • Estándar C23 (ISO/IEC 9899:2024):
  • 7.27.3.5 The strftime function (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.27.3.5 The strftime function (p: 288-291)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.27.3.5 The strftime function (p: 394-397)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.23.3.5 The strftime function (p: 343-347)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.5 The strftime function

Véase también

(obsoleto en C23)(C11)
convierte un objeto tm a una representación textual
(función)
(obsoleto en C23)(C11)
convierte un objeto time_t a una representación textual
(función)
convierte un objeto tm a una representación textual personalizada de cadena ancha
(función)
Documentación de C++ para strftime