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/Macro | Descripción |
|---|---|
CLOCKS_PER_SEC | Número de ciclos de reloj por segundo. |
NULL | Constante de puntero nulo. |
TIME_UTC | Representa 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 |
|---|---|
| 1 | size_t Es un tipo de entero sin signo, que es elsizeofresultado de la palabra clave. |
| 2 | clock_t Este es un tipo adecuado para almacenar tiempo de procesador. |
| 3 | time_t is Este es un tipo adecuado para almacenar tiempo de calendario. |
| 4 | struct 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 |
|---|---|
| 1 | NULL Esta macro es un valor de constante de puntero nulo. |
| 2 | CLOCKS_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 |
|---|---|
| 1 | char *asctime(const struct tm *timeptr) Devuelve un puntero a una cadena que representa la fecha y la hora de la estructura timeptr. |
| 2 | clock_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). |
| 3 | char *ctime(const time_t *timer) Devuelve una cadena que representa la hora local, basada en el parámetro timer. |
| 4 | double difftime(time_t time1, time_t time2) Devuelve el número de segundos de diferencia entre time1 y time2 (time1-time2). |
| 5 | struct 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). |
| 6 | struct tm *localtime(const time_t *timer) El valor de timer se descompone en una estructura tm y se expresa en la zona horaria local. |
| 7 | time_t mktime(struct tm *timeptr) Convierte la estructura señalada por timeptr en un valor time_t basado en la zona horaria local. |
| 8 | size_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. |
| 9 | time_t time(time_t *timer) Calcula el tiempo de calendario actual y lo codifica en formato time_t. |
| 10 | int 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 <time.h>
int main() {
time_t current_time;
time(¤t_time);
printf("Current time: %s", ctime(¤t_time));
return 0;
}
Dar formato a la hora:
Ejemplo
#include <time.h>
int main() {
time_t current_time;
struct tm *time_info;
char buffer[80];
time(¤t_time);
time_info = localtime(¤t_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 <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 <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 usar
localtimeygmtime, el puntero devuelto apunta a unastruct tmestructura con almacenamiento estático, y cada llamada sobrescribirá el contenido anterior. - Al usar la
mktimefunción, se debe garantizar questruct tmcada campo en sea legal. - Al usar la
strftimefunció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.