strftime
| 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:
|
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:
|
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:
|
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) |
(C95) |
convierte un objeto tm a una representación textual personalizada de cadena ancha (función) |
Documentación de C++ para strftime
| |