Namespaces
Variants

asctime, asctime_s

From cppreference.net
Definido en el encabezado <time.h>
(1)
char * asctime ( const struct tm * time_ptr ) ;
(hasta C23)
[ [ deprecated ] ] char * asctime ( const struct tm * time_ptr ) ;
(desde C23)
errno_t asctime_s ( char * buf, rsize_t bufsz, const struct tm * time_ptr ) ;
(2) (desde C11)
1) Convierte el tiempo de calendario dado tm a una representación textual del siguiente formato fijo de 25 caracteres: Www Mmm dd hh : mm : ss yyyy\n
  • Www - abreviatura inglesa de tres letras del día de la semana desde time_ptr - > tm_wday , uno de Mon , Tue , Wed , Thu , Fri , Sat , Sun .
  • Mmm - abreviatura inglesa de tres letras del nombre del mes desde time_ptr - > tm_mon , uno de Jan , Feb , Mar , Apr , May , Jun , Jul , Aug , Sep , Oct , Nov , Dec .
  • dd - día del mes de 2 dígitos desde timeptr - > tm_mday como si fuera impreso por sprintf usando % 2d .
  • hh - hora de 2 dígitos desde timeptr - > tm_hour como si fuera impreso por sprintf usando % .2d .
  • mm - minuto de 2 dígitos desde timeptr - > tm_min como si fuera impreso por sprintf usando % .2d .
  • ss - segundo de 2 dígitos desde timeptr - > tm_sec como si fuera impreso por sprintf usando % .2d .
  • yyyy - año de 4 dígitos desde timeptr - > tm_year + 1900 como si fuera impreso por sprintf usando % 4d .
El comportamiento es indefinido si cualquier miembro de * time_ptr está fuera de su rango normal.
El comportamiento es indefinido si el año calendario indicado por time_ptr - > tm_year tiene más de 4 dígitos o es menor que el año 1000.
La función no admite localización, y el carácter de nueva línea no puede eliminarse.
La función modifica almacenamiento estático y no es segura para hilos.
Esta función está obsoleta y no debe usarse en código nuevo.
(desde C23)
2) Igual que (1) , excepto que el mensaje se escribe en el almacenamiento proporcionado por el usuario buf , que está garantizado que esté terminado en nulo, y los siguientes errores se detectan en tiempo de ejecución y llaman a la función constraint handler actualmente instalada:
  • buf o time_ptr es un puntero nulo
  • bufsz es menor que 26 o mayor que RSIZE_MAX
  • no todos los miembros de * time_ptr están dentro de sus rangos normales
  • el año indicado por time_ptr - > tm_year es menor que 0 o mayor que 9999.
Como con todas las funciones con verificación de límites, asctime_s solo está garantizado que esté disponible si __STDC_LIB_EXT1__ está definido por la implementación y si el usuario define __STDC_WANT_LIB_EXT1__ como la constante entera 1 antes de incluir <time.h> .

Contenidos

Parámetros

time_ptr - puntero a un objeto tm que especifica el tiempo a imprimir
buf - puntero a un búfer proporcionado por el usuario de al menos 26 bytes de longitud
bufsz - tamaño del búfer proporcionado por el usuario

Valor de retorno

1) puntero a una cadena de caracteres estática terminada en nulo que contiene la representación textual de fecha y hora como se describió anteriormente. La cadena puede ser compartida entre asctime y ctime , y puede ser sobrescrita en cada invocación de cualquiera de esas funciones.
2) cero en caso de éxito, distinto de cero en caso de fallo, en cuyo caso buf [ 0 ] se establece a cero (a menos que buf sea un puntero nulo o bufsz sea cero o mayor que RSIZE_MAX ).

Notas

asctime devuelve un puntero a datos estáticos y no es seguro para hilos. POSIX marca esta función como obsoleta y recomienda strftime en su lugar. El estándar C también recomienda strftime en lugar de asctime y asctime_s porque strftime es más flexible y sensible a la configuración regional.

POSIX limita los comportamientos indefinidos solo a cuando la cadena de salida sería más larga de 25 caracteres, cuando timeptr - > tm_wday o timeptr - > tm_mon no están dentro de los rangos esperados, o cuando timeptr - > tm_year excede INT_MAX - 1990 .

Algunas implementaciones manejan timeptr - > tm_mday == 0 como si significara el último día del mes anterior.

Ejemplo

#define __STDC_WANT_LIB_EXT1__ 1
#include <stdio.h>
#include <time.h>
int main(void)
{
    struct tm tm = *localtime(&(time_t){time(NULL)});
    printf("%s", asctime(&tm)); // nota: '\n' final implícito
#ifdef __STDC_LIB_EXT1__
    char str[26];
    asctime_s(str, sizeof str, &tm);
    printf("%s", str);
#endif
}

Salida posible:

Tue May 26 21:51:50 2015
Tue May 26 21:51:50 2015

Referencias

  • Estándar C17 (ISO/IEC 9899:2018):
  • 7.27.2.1 La función asctime (p: 287)
  • K.3.8.2.1 La función asctime_s (p: 453-454)
  • Estándar C11 (ISO/IEC 9899:2011):
  • 7.27.2.1 La función asctime (p: 392-393)
  • K.3.8.2.1 La función asctime_s (p: 624-625)
  • Estándar C99 (ISO/IEC 9899:1999):
  • 7.23.3.1 La función asctime (p: 341-342)
  • Estándar C89/C90 (ISO/IEC 9899:1990):
  • 4.12.3.1 La función asctime

Véase tambié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
(función)