# Fonctions de base en langage C/time.h
## Présentation

Les premiers développeurs d'UNIX accordaient une grande importance aux calcul de dates et d'heures. Les fonctions déclarées dans time.h sont donc nombreuses.
La norme C laisse beaucoup de liberté quant à l'implémentation des fonctions de date. Pour les programmes qui nécessitent une grande précision, il faudra faire des tests pour évaluer le système cible sur ce point.

## Type de données propres à time.h

* clock_t est un type entier permettant de représenter le temps écoulé depuis le démarrage du programme.
* time_t représente un entier signé positif après l’Epoch (1er janvier 1970 à 0 heure, 0 minute, 0 seconde sous UNIX) et négatif avant. Le code retour de la fonction en cas d'erreur est (time_t)-1. Cette valeur -1 représente aussi la dernière seconde de l'année 1969.

### La structure tm

La structure tm permet de stocker un temps décomposé dans ses différents champs :
* int tm_sec : nombre de secondes (0 - 60), la seconde supplémentaire est nécessaire pour des recalages.
* int tm_min : minutes (0 - 59)
* int tm_hour : heures (0 - 23)
* int tm_mday : numéro du jour dans le mois (1 - 31)
* int tm_mon : numéro du mois dans l'année (0 - 11)
* int tm_year : année + 1900
* int tm_wday : numéro du jour dans la semaine (Dimanche = 0)
* int tm_yday : numéro du jour dans l'année (0 - 365)
* int tm_isdst : différent de 0 si l’heure d'été en vigueur
* char *tm_zone : abréviation d'une zone géographique concernant le temps. Exemple : CET pour Central European Time = UTC + 1 heure.
* long tm_gmtoff : décalage du temps UTC en secondes par rapport au 1er méridien.

## Temps écoulé
### Fonction clock

La fonction clock_t clock(void) permet de connaître le nombre de fractions de temps machine écoulées depuis le début du programme. La valeur retournée peut être convertie en secondes en la divisant par la constante CLOCKS_PER_SEC. Elle peut servir à évaluer l'espace de temps entre deux évènements.
Un exemple d’utilisation :
Donne à l'exécution sur mon système :

### Remarque : temps user et système

Pour obtenir des données comme le temps consommé par vos calculs (temps user), le temps utilisé lors des appels au système (temps système) et bien d'autres informations comme le fait la commande time (1) d'un système UNIX, vous pouvez utiliser la fonction UNIX getrusage. Cette fonction ne fait pas partie de time.h :

## Date, heure et calendrier
### Fonction time

La fonction time_t time(time_t *tloc) retourne le nombre de secondes écoulées depuis le 1er janvier 1970 à 0 heure, 0 minute, 0 seconde sous UNIX, UTC.
Un exemple :
Donne à l'exécution sur mon système :

### Autres fonctions

* double difftime(time_t time1, time_t time0) Retourne le nombre de secondes qui séparent les temps time1 et time0.
* time_t mktime(struct tm *tm) Cette fonction accepte en paramètre l'adresse d'une structure tm dont vous aurez complété les champs. La fonction normalisera les champs et renseignera les champs tm_wday, tm_yday et tm_mday si tm_mon et tm_year sont connus. Elle retourne aussi le nombre de secondes depuis l’Epoch.
* char *asctime(const struct tm *tm) Convertit le temps décomposé tm en une chaîne de caractères du genre Mon Apr 28 22:19:20 2008.
* struct tm *localtime(const time_t *clock) Convertit le temps en secondes clock en un temps décomposé exprimé en temps local dans la structure tm.
* struct tm *gmtime(const time_t *clock) Convertit le temps en secondes clock en un temps décomposé exprimé en temps UTC dans la structure tm.
* char *ctime(const time_t *clock) = asctime(localtime(clock)).
* size_t strftime(char * restrict buf, size_t maxsize, const char * restrict format, const struct tm * restrict timeptr) convertit dans la chaîne buf, la date décomposée tm selon les directives indiquées par format.

## Reference

* ↑ (en)liste des abréviations pour les zones de temps
| string.h | conio.h |