Bibliothèque standard C -<time.h>

Introduction

time.hLe fichier d'en-tête définit quatre types de variables, deux macros et diverses fonctions pour manipuler les dates et les heures.

<time.h>Il s'agit d'un fichier d'en-tête de la bibliothèque standard C qui fournit des fonctions et des types pour le traitement et la manipulation des dates et des heures. Les fonctions de ce fichier d'en-tête sont utilisées pour obtenir l'heure actuelle, définir l'heure, formater l'heure, calculer les écarts de temps, etc.

Constantes et macros

Constantes/MacrosDescription
CLOCKS_PER_SECNombre de cycles d'horloge par seconde.
NULLConstante de pointeur nul.
TIME_UTCReprésente l'heure UTC (C11).

Variables de la bibliothèque

Voici les types de variables définis dans le fichier d'en-tête time.h :

Numéro de sérieVariable & Description
1size_t
Est un type entier non signé, qui est le résultat du mot-clésizeof.
2clock_t
C'est un type adapté au stockage du temps processeur.
3time_t est
C'est un type adapté au stockage du temps calendaire.
4struct tm
C'est une structure utilisée pour stocker l'heure et la date.

La structure tm est définie comme suit :

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 bibliothèque

Voici les macros définies dans le fichier d'en-tête time.h :

Numéro de sérieMacro & Description
1NULL
Cette macro est la valeur d'une constante de pointeur nul.
2CLOCKS_PER_SEC
Cette macro représente le nombre de tops d'horloge du processeur par seconde.

Fonctions de bibliothèque

Voici les fonctions définies dans le fichier d'en-tête time.h :

Numéro de sérieFonction & Description
1char *asctime(const struct tm *timeptr)
Renvoie un pointeur vers une chaîne représentant la date et l'heure de la structure timeptr.
2clock_t clock(void)
Renvoie la quantité de temps processeur utilisée depuis le début de l'exécution du programme (généralement le démarrage du programme).
3char *ctime(const time_t *timer)
Renvoie une chaîne représentant l'heure locale, en fonction du paramètre timer.
4double difftime(time_t time1, time_t time2)
Renvoie le nombre de secondes de différence entre time1 et time2 (time1-time2).
5struct tm *gmtime(const time_t *timer)
La valeur de timer est décomposée en une structure tm et exprimée en temps universel coordonné (UTC), également appelé heure moyenne de Greenwich (GMT).
6struct tm *localtime(const time_t *timer)
La valeur de timer est décomposée en une structure tm et exprimée dans le fuseau horaire local.
7time_t mktime(struct tm *timeptr)
Convertit la structure pointée par timeptr en une valeur time_t basée sur le fuseau horaire local.
8size_t strftime(char *str, size_t maxsize, const char *format, const struct tm *timeptr)
Formate l'heure représentée par la structure timeptr selon les règles de formatage définies dans format, et la stocke dans str.
9time_t time(time_t *timer)
Calcule l'heure calendaire actuelle et l'encode au format time_t.
10int timespec_get(struct timespec *ts, int base);
Obtient l'heure actuelle (C11).

Exemple

Ce qui suit utilise<time.h>Exemples de quelques fonctions dans

Obtenir l'heure actuelle :

Exemple

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

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

    return 0;
}

Formater l'heure :

Exemple

#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("Heure formatée : %s\n", buffer);

    return 0;
}

Calculer la différence de temps :

Exemple

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

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

    time(&start_time);
    // Simuler une opération chronophage
    for (int i = 0; i < 100000000; i++);

    time(&end_time);
    time_diff = difftime(end_time, start_time);
    printf("Différence de temps : %.2f secondes\n", time_diff);

    return 0;
}

Utilisationstruct tm:

Exemple

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

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

    time_info.tm_year = 2024 - 1900;  // L'année est calculée à partir de 1900
    time_info.tm_mon = 5;             // juin, plage de 0 à 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;          // Détermine automatiquement s'il s'agit de l'heure d'été

    mktime(&time_info);

    strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", &time_info);
    printf("Heure personnalisée : %s\n", buffer);

    return 0;
}

Notes

  • UtilisationlocaltimeetgmtimeLorsque, le pointeur renvoyé pointe versstruct tmLa structure est stockée statiquement, et chaque appel écrase le contenu précédent.
  • UtilisationmktimeLorsque vous utilisez la fonction, vous devez vous assurerstruct tmLes différents champs dans sont valides.
  • UtilisationstrftimeLors de l'exécution du formatage de l'heure, assurez-vous que le tampon de destination est suffisamment grand pour éviter un dépassement de tampon.

En comprenant et en utilisant<time.h>Les fonctions fournies facilitent la manipulation des dates et des heures, permettant d'écrire des programmes C plus riches en fonctionnalités et plus efficaces.

autres extensions