Subrutina strftime o strftime_l
Finalidad
Formatea la hora y la fecha.
Biblioteca
Biblioteca C estándar (libc.a)
Sintaxis
#include <time.h>
size_t strftime ( String, Length, Format, TmDate)
char *String;
size_t Length;
const char *Format;
const struct tm *TmDate;
size_t strftime_l(char *restrict String, size_t Length,
const char *restrict Format, const struct tm *restrict TmDate,locale_t Locale);Descripción
La subrutina strftime convierte la especificación de fecha y hora interna de la estructura tm , a la que apunta el parámetro TmDate , en una serie de caracteres a la que apunta el parámetro Serie bajo la dirección de la serie de formato a la que apunta el parámetro Formato . Los valores reales para los especificadores de formato dependen de los valores actuales para la categoría LC_TIME . Los valores de estructura tm pueden ser asignados por el usuario o generados por la subrutina localtime o gmtime . La serie resultante es similar al resultado del parámetro printf Format y se coloca en la ubicación de memoria a la que se dirige el parámetro String . La longitud máxima de la serie viene determinada por el parámetro Longitud y termina con un carácter nulo.
Muchas especificaciones de conversión son las mismas que las utilizadas por el mandato date . La interpretación de algunas especificaciones de conversión depende del entorno local actual del proceso.
El parámetro Formato es una serie de caracteres que contiene dos tipos de objetos: caracteres sin formato que simplemente se colocan en la serie de salida y especificaciones de conversión que convierten la información del parámetro TmDate en un formato legible en la serie de salida. Cada especificación de conversión es una secuencia de este formato: % type.
- Un % (signo de porcentaje) introduce una especificación de conversión.
- El tipo de conversión se especifica mediante uno o dos caracteres de conversión. Los caracteres y sus significados son:
Elemento Descripción %a Representa el nombre abreviado del día de la semana del entorno local (por ejemplo,Sun). definido por la sentencia abday en la categoría LC_TIME . %A Representa el nombre completo del día de la semana del entorno local (por ejemplo,Sunday). definido por la sentencia day en la categoría LC_TIME . %b Representa el nombre de mes abreviado del entorno local (por ejemplo,Jan). definido por la sentencia abmon en la categoría LC_TIME . %B Representa el nombre de mes completo del entorno local (por ejemplo,January). definido por la sentencia mon en la categoría LC_TIME . %c Representa el formato de fecha y hora del entorno local definido por la sentencia d_t_fmt en la categoría LC_TIME . %C Representa el número de siglo (el año dividido por 100 y truncado en un entero) como un número decimal (de 00 a 99 calculado a partir del término estándar tm_year que se define en la estructura tm de la biblioteca time.h )
Si no se especifica un ancho de campo mínimo, el número de caracteres que se colocan en la matriz apuntada por el parámetro string es el número de dígitos del año dividido por 100 o dos, el que sea mayor. Si se especifica un ancho de campo mínimo, el número de caracteres que se colocan en la matriz apuntada por el parámetro string es el número de dígitos del año dividido por 100 o el ancho de campo mínimo, el que sea mayor.
%d Representa el día del mes como un número decimal (01 a 31). %D Representa la fecha en formato %m/%d/%y (por ejemplo,01/31/91). %e Representa el día del mes como un número decimal (01 a 31). El descriptor de campo %e utiliza un campo de dos dígitos. Si el día del mes no es un número de dos dígitos, el dígito inicial se rellena con un carácter de espacio. %E Representa el año y el nombre de la era alternativa combinados del entorno local, respectivamente, en formato %o %N . %F Representa la fecha en formato %+4Y-%m-%d si no se especifica ningún distintivo y ningún ancho de campo mínimo (calculado a partir de los términos estándar tm_year, tm_mony tm_mday definidos en la estructura tm de la biblioteca time.h ).
Si se especifica un ancho de campo mínimo de menos o igual a 6 bytes, la serie de salida del año es la misma que la serie de salida del especificador Y con cualquier distintivo especificado y un ancho de campo mínimo de 6 bytes. Si el ancho de campo especificado es inferior a 6 bytes, el ancho de campo se considera como 6 bytes de forma predeterminada.
Si el ancho de campo mínimo se especifica como 10 bytes, y el año tiene cuatro dígitos de longitud, la serie de salida que se genera coincide con la subcláusula estándar ISO 8601:2000 4.1.2.2 representación completa, representación de fecha de formato ampliado de un día específico (AAAA-MM-DD). Por ejemplo, 2021-05-20.
Si se especifica un distintivo + y una anchura de campo mínima de más de 6 bytes, y 7 bytes son suficientes para contener los dígitos del año (sin incluir ningún carácter de signo), la serie de salida coincide con la subcláusula estándar ISO 8601:2000 4.1.2.4 representación completa, representación de fecha de formato ampliado de un día específico (± AAAAA-MM-DD). Por ejemplo, + 002021-05-20.
%G Representa el año basado en la semana como un número decimal, por ejemplo,1977(calculado a partir de los términos estándar tm_year, tm_wday, tm_yday definidos en la estructura tm de la biblioteca time.h ).
Si se especifica un ancho de campo mínimo, el número de caracteres que se colocan en la matriz apuntada por el parámetro string es el número de dígitos y los caracteres de signo inicial (si los hay) del año, o el ancho de campo mínimo, el que sea mayor.
%g Representa los dos últimos dígitos del año basado en la semana ISO 8601 como un número decimal (de 0 a 99). Es como %G, pero sin siglo. (Calculado a partir de tm_year, tm_yday y tm_wday.) %h Representa el nombre de mes abreviado del entorno local (por ejemplo,Jan). definido por la sentencia abmon en la categoría LC_TIME . Este descriptor de campo es un sinónimo del descriptor de campo %b . %H Representa la hora de reloj de 24 horas como un número decimal (00 a 23). %I Representa la hora de reloj de 12 horas como un número decimal (01 a 12). %j Representa el día del año como un número decimal (001 a 366). %k Representa el reloj de 24 horas como un número de espacio lleno justificado a la derecha (de 0 a 23). %m Representa el mes del año como un número decimal (01 a 12). %M Representa los minutos de la hora como un número decimal (00 a 59). %n Especifica un carácter de nueva línea. %N Representa el nombre de la era alternativa del entorno local. %o Representa el año de la era alternativa. %p Representa el a.mdel entorno local. o p.m. serie definida por la sentencia am_pm en la categoría LC_TIME . %r Representa la hora de reloj de 12 horas con a.m./p.m. notación tal como la define la sentencia t_fmt_ampm . El formato habitual es %I: %M: %S %p. %R Representa la hora del reloj de 24 horas en formato %H: %M . %s Representa el número de segundos desde el 1 de enero de 1970, hora universal coordinada (CUT). %S Representa los segundos del minuto como un número decimal (de 00 a 59). %t Especifica un carácter de tabulación. %t Representa la hora de reloj de 24 horas con el formato %H: %M: %S (por ejemplo,16:55:15). %u Representa el día de la semana como un número decimal (1 a 7). El lunes o su equivalente se considera el primer día de la semana para calcular el valor de este descriptor de campo. %U Representa la semana del año como un número decimal (00 a 53). El domingo, o su equivalente definido por la sentencia day en la categoría LC_TIME , se considera el primer día de la semana para calcular el valor de este descriptor de campo. %V Representa el número de semana del año basado en la semana ISO 8601 (con el lunes como el primer día de la semana) como un número decimal (01 a 53). Si la semana que contiene el 1 de enero tiene cuatro o más días en el año nuevo, entonces se considera la semana 1; de lo contrario, se considera la semana 52 (o 53 si el año anterior fue un año bisiesto) del año anterior, y la semana siguiente es la semana 1 del año nuevo. %w Representa el día de la semana como un número decimal (de 0 a 6). El domingo, o su equivalente definido por la sentencia day , se considera como 0 para calcular el valor de este descriptor de campo. %W Representa la semana del año como un número decimal (00 a 53). El lunes, o su equivalente definido por la sentencia day , se considera el primer día de la semana para calcular el valor de este descriptor de campo. %x Representa el formato de fecha del entorno local tal como lo define la sentencia d_fmt . %X Representa el formato de hora del entorno local tal como lo define la sentencia t_fmt . %y Representa el año del siglo. Nota: Cuando la variable de entorno XPG_TIME_FMT=ON, %y es el año dentro del siglo. Cuando un siglo no se especifica de otra manera, los valores en el rango 69-99 se refieren a años en el siglo XX (1969 a 1999, inclusive); los valores en el rango 00-68 se refieren a 2000 a 2068, inclusive.%Y Representa el año como un número decimal, por ejemplo,1989(calculado a partir del término estándar tm_yearque se define en la estructura tm de la biblioteca time.h ).
Si se especifica un ancho de campo mínimo, el número de caracteres que se colocan en la matriz apuntada por el parámetro string es el número de dígitos y los caracteres de signo inicial (si los hay) del año, o el ancho de campo mínimo, el que sea mayor.
%z Representa el desplazamiento de la hora universal coordinada (UTC) en el formato ISO 8601 −0430 significa 4 horas 30 minutos detrás de UTC, al oeste de Greenwich, o por ningún carácter si no puede determinar el huso horario [tm_isdst]. Nota: Debe establecer el valor de la variable de entornoXPG_SUS_ENV=ONpara utilizar la opción %z ; de lo contrario, vuelve a la opción %Z .%Z Representa el nombre de huso horario si se puede determinar uno (por ejemplo, EST). No se visualizan caracteres si no se puede determinar un huso horario. %% Especifica un% (signo de porcentaje).
Algunos especificadores de conversión se pueden modificar mediante los caracteres de modificador E o O para indicar que se debe utilizar un formato o especificación alternativo. Si el formato o la especificación alternativos no existen para el entorno local actual, el comportamiento será el mismo que con la especificación de conversión no modificada. Se da soporte a los siguientes especificadores de conversión modificados:
| Elemento | Descripción |
|---|---|
| %Ec | Representa la fecha y hora adecuadas alternativas del entorno local tal como se define en la sentencia era_d_t_fmt . |
| %EC | Representa el nombre del año base (u otro periodo de tiempo) en el formato alternativo del entorno local tal como lo define la sentencia era bajo la categoría era_name de la era actual. |
| %Ex | Representa la fecha alternativa del entorno local tal como la define la sentencia era_d_fmt . |
| %EX | Representa la hora alternativa del entorno local tal como la define la sentencia era_t_fmt . |
| %Ey | Representa el desplazamiento del especificador de conversión modificado %EC (sólo año) en el formato alternativo del entorno local. |
| %EY | Representa el formulario de año alternativo completo. |
| %Od | Representa el día del mes, utilizando los símbolos numéricos alternativos del entorno local, rellenados según sea necesario con 0 iniciales si existe un símbolo alternativo para 0. Si no existe un símbolo alternativo para 0, el especificador de conversión modificado %Od utiliza caracteres de espacio iniciales. |
| %Oe | Representa el día del mes, utilizando los símbolos numéricos alternativos del entorno local, rellenados según sea necesario con 0 iniciales si existe un símbolo alternativo para 0. Si no existe un símbolo alternativo para 0, el especificador de conversión modificado %Oe utiliza caracteres de espacio iniciales. |
| %OH | Representa la hora en hora de reloj de 24 horas, utilizando los símbolos numéricos alternativos del entorno local. |
| %OI | Representa la hora en la hora de reloj de 12 horas, utilizando los símbolos numéricos alternativos del entorno local. |
| %Om | Representa el mes, utilizando los símbolos numéricos alternativos del entorno local. |
| %OM | Representa los minutos, utilizando los símbolos numéricos alternativos del entorno local. |
| %SO | Representa los segundos, utilizando los símbolos numéricos alternativos del entorno local. |
| %Ou | Representa el día de la semana como un número que utiliza los símbolos numéricos alternativos del entorno local. |
| %UO | Representa el número de semana del año, utilizando los símbolos numéricos alternativos del entorno local. El domingo se considera el primer día de la semana. Utilice las reglas correspondientes al especificador de conversión %U . |
| %OV | Representa el número de semana del año (lunes como primer día de la semana, reglas correspondientes a %V) utilizando los símbolos numéricos alternativos del entorno local. |
| %Ow | Representa el número del día de la semana (con el domingo igual a 0), utilizando los símbolos numéricos alternativos del entorno local. |
| %OW | Representa el número de semana del año utilizando los símbolos numéricos alternativos del entorno local. El lunes se considera el primer día de la semana. Utilice las reglas correspondientes al especificador de conversión %W . |
| %Oy | Representa el año (desplazamiento desde %C) utilizando los símbolos numéricos alternativos del entorno local. |
La subrutina strftime_l() es similar a la subrutina strftime() , excepto la información de entorno local que se especifica en la variable de entorno local. Si la variable de entorno local de la subrutina strftime_l() se establece como un objeto de entorno local especial, LC_GLOBAL_LOCALE, o no es un descriptor de contexto de objeto de entorno local válido, la subrutina strftime_l() puede dar como resultado resultados inesperados.
Parámetros
| Elemento | Descripción |
|---|---|
| serie | Apunta a la serie que debe contener la hora formateada. |
| longitud | Especifica la longitud máxima de la serie a la que apunta el parámetro Serie . |
| Formato | Apunta a la serie de caracteres de formato. |
| TmDate | Apunta a la estructura de tiempo que se va a convertir. |
| Entorno local | Apunta al objeto de entorno local que contiene la información de entorno local. |
Valores de retorno
Si el número total de bytes resultantes, incluido el byte nulo de terminación, no es mayor que el valor de Longitud , la subrutina strftime devuelve el número de bytes colocados en la matriz a la que apunta el parámetro Serie , sin incluir el byte nulo de terminación. De lo contrario, se devuelve un valor de 0 y el contenido de la matriz es indeterminado.