Biblioteca estándar de C -<time.h>

Introducción

time.hEl archivo de cabecera define cuatro tipos de variables, dos macros y varias funciones para operar con fechas y horas.

<time.h>Es un archivo de cabecera de la biblioteca estándar de C que proporciona funciones y tipos para procesar y manipular fechas y horas. Las funciones en este archivo de cabecera se utilizan para obtener la hora actual, establecer la hora, formatear la hora y calcular diferencias de tiempo, entre otras.

Constantes y macros

Constante/MacroDescripción
CLOCKS_PER_SECNúmero de ciclos de reloj por segundo.
NULLConstante de puntero nulo.
TIME_UTCRepresenta la hora UTC (C11).

Variables de la biblioteca

A continuación se muestran los tipos de variables definidos en el archivo de cabecera time.h:

N.ºVariable y descripción
1size_t
Es un tipo de entero sin signo, que es elsizeofresultado de la palabra clave.
2clock_t
Este es un tipo adecuado para almacenar tiempo de procesador.
3time_t is
Este es un tipo adecuado para almacenar tiempo de calendario.
4struct tm
Esta es una estructura utilizada para almacenar la hora y la fecha.

La definición de la estructura tm es la siguiente:

struct tm {
   int tm_sec;         /* 秒,范围从 0 到 59        */
   int tm_min;         /* 分,范围从 0 到 59        */
   int tm_hour;        /* 小时,范围从 0 到 23        */
   int tm_mday;        /* 一月中的第几天,范围从 1 到 31    */
   int tm_mon;         /* 月,范围从 0 到 11        */
   int tm_year;        /* 自 1900 年起的年数        */
   int tm_wday;        /* 一周中的第几天,范围从 0 到 6    */
   int tm_yday;        /* 一年中的第几天,范围从 0 到 365    */
   int tm_isdst;       /* 夏令时                */
};

Macros de la biblioteca

A continuación se muestran las macros definidas en el archivo de cabecera time.h:

N.ºMacro y descripción
1NULL
Esta macro es un valor de constante de puntero nulo.
2CLOCKS_PER_SEC
Esta macro representa el número de ciclos de reloj del procesador por segundo.

Funciones de la biblioteca

A continuación se muestran las funciones definidas en el archivo de cabecera time.h:

N.ºFunción y descripción
1char *asctime(const struct tm *timeptr)
Devuelve un puntero a una cadena que representa la fecha y la hora de la estructura timeptr.
2clock_t clock(void)
Devuelve el tiempo de reloj del procesador utilizado desde el inicio de la ejecución del programa (generalmente el comienzo del programa).
3char *ctime(const time_t *timer)
Devuelve una cadena que representa la hora local, basada en el parámetro timer.
4double difftime(time_t time1, time_t time2)
Devuelve el número de segundos de diferencia entre time1 y time2 (time1-time2).
5struct tm *gmtime(const time_t *timer)
El valor de timer se descompone en una estructura tm y se expresa en Tiempo Universal Coordinado (UTC), también conocido como Hora Media de Greenwich (GMT).
6struct tm *localtime(const time_t *timer)
El valor de timer se descompone en una estructura tm y se expresa en la zona horaria local.
7time_t mktime(struct tm *timeptr)
Convierte la estructura señalada por timeptr en un valor time_t basado en la zona horaria local.
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
Según las reglas de formato definidas en format, da formato al tiempo representado por la estructura timeptr y lo almacena en str.
9time_t time(time_t *timer)
Calcula el tiempo de calendario actual y lo codifica en formato time_t.
10int timespec_get(struct timespec *ts, int base);
Obtiene la hora actual (C11).

Ejemplo

A continuación se muestra un ejemplo del uso de<time.h>algunas funciones en.

Obtener la hora actual:

Ejemplo

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

int main() {
    time_t current_time;
    time(&current_time);
    printf("Current time: %s", ctime(&current_time));

    return 0;
}

Dar formato a la hora:

Ejemplo

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

int main() {
    time_t current_time;
    struct tm *time_info;
    char buffer[80];

    time(&current_time);
    time_info = localtime(&current_time);

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", time_info);
    printf("Formatted time: %s\n", buffer);

    return 0;
}

Calcular la diferencia de tiempo:

Ejemplo

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

int main() {
    time_t start_time, end_time;
    double time_diff;

    time(&start_time);
    // Simular una operación que consume tiempo
    for (int i = 0; i < 100000000; i++);

    time(&end_time);
    time_diff = difftime(end_time, start_time);
    printf("Time difference: %.2f seconds\n", time_diff);

    return 0;
}

Usarstruct tm:

Ejemplo

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

int main() {
    struct tm time_info;
    char buffer[80];

    time_info.tm_year = 2024 - 1900;  // El año se calcula a partir de 1900
    time_info.tm_mon = 5;             // Junio, el rango es de 0 a 11
    time_info.tm_mday = 12;
    time_info.tm_hour = 12;
    time_info.tm_min = 0;
    time_info.tm_sec = 0;
    time_info.tm_isdst = -1;          // Determina automáticamente si es horario de verano

    mktime(&time_info);

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &time_info);
    printf("Custom time: %s\n", buffer);

    return 0;
}

Notas importantes

  • Al usarlocaltimeygmtime, el puntero devuelto apunta a unastruct tmestructura con almacenamiento estático, y cada llamada sobrescribirá el contenido anterior.
  • Al usar lamktimefunción, se debe garantizar questruct tmcada campo en sea legal.
  • Al usar lastrftimefunción para formatear el tiempo, se debe asegurar que el búfer de destino sea lo suficientemente grande para evitar el desbordamiento del búfer.

Al comprender y usar las<time.h>funciones proporcionadas, se pueden manipular convenientemente la hora y la fecha, lo que permite escribir programas en C más ricos en funciones y más eficientes.

Otras extensiones