Namespaces
Variants

strftime

From cppreference.net
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 de calendario dado tp a una cadena de caracteres multibyte terminada en nulo str de acuerdo con la cadena de formato format . Se escriben hasta count bytes.

Contenidos

Parámetros

str - puntero al primer elemento del char array para 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 struct tm objeto que especifica el tiempo 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, 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
(C99)
escribe el carácter de nueva línea
t
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
escribe los primeros 2 dígitos del 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, por ejemplo 平成 (era Heisei) en ja_JP tm_year
G
(C99)
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
(C99)
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
Ob
(C23)
escribe el nombre del mes abreviado en la representación alternativa de la configuración regional tm_mon
h
(C99)
sinónimo de b tm_mon
B escribe el 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 el mes como un número decimal (rango [01,12] ) tm_mon
Om
(C99)
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
(C99)
escribe la semana del año , como con %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
(C99)
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
(C99)
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
(C99)
escribe la semana del año , como con %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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
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
(C99)
escribe la 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
(C99)
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
(C99)
escribe representación alternativa de tiempo (dependiente de la configuración regional) todos
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 12 horas localizado (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. localizado (dependiente de la configuración regional) tm_hour
z
(C99)
escribe el desplazamiento del UTC en formato ISO 8601 (por ejemplo, -0430 ), o ningún carácter si la información de la 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

El número de bytes escritos en el array de caracteres apuntado por str sin incluir el carácter terminador ' \0 ' en caso de éxito. Si se alcanzó count antes de que toda la cadena pudiera almacenarse, 0 es retornado 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, // = año 2012
                          .tm_mon = 9,    // = 10º mes
                          .tm_mday = 9,   // = 9º día
                          .tm_hour = 8,   // = 8 horas
                          .tm_min = 10,   // = 10 minutos
                          .tm_sec = 20    // = 20 segundos
    };
    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");
}

Salida posible:

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 La función strftime (p: TBD)
  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.27.3.5 La función strftime (p: 288-291)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.27.3.5 La función strftime (p: 394-397)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.23.3.5 La función strftime (p: 343-347)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.5 La función strftime

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)