La gestion du temps en C
Dernière mise à jour : 25/04/2009 19:48:05
Un forum web "Bien programmer en C" permet de poser des questions sur les articles, le C en général, la programmation etc.
Le langage C fournit un certain nombre de fonctions permettant de lire l'heure/date courante et de convertir la valeur lue en structure ou en chaine de caractères. Ces éléments sont définis et déclarés dans le header standard <time.h>
Elément | Nature | Description |
---|---|---|
struct tm | structure | Structure de date et heure |
time() | fonction | Lecture de l'heure courante |
time_t | type | Type retourné par time() |
localtime() | fonction | Charge la structure tm avec l'heure locale |
gmtime() | fonction | Charge la structure tm avec l'heure GMT |
mktime() | fonction | Normalise la structure tm. Retourne le temps en time_t |
strftime() | fonction | Créee une chaine formatée à partir d'une structure tm |
difftime() | fonction | Calcule la différence entre 2 dates |
On utilise la fonction time(). On peut soit passer l'adresse d'un time_t, soit récupérer la valeur dans un time_t. Si on utilise pas l'adresse d'un time_t, il faut le préciser à la fonction en passant NULL :
#include <time.h> int main (void) { time_t ta; time_t tb; time (&ta); tb = time (NULL); return 0; }
Telle quelle, la valeur contenue dans ta et tb n'a pas grande signification. La norme dit que c'est un grand entier qui représente un nombre d'élément de temps depuis une date donnée. Sous POSIX.1, c'est un nombre de secondes depuis le 1er janvier 1970. (Epoch). En principe, on ne manipule pas la valeur directement, mais via sa représentation en struct tm.
Cette valeur a quand même un intérêt pratique. Il y a de fortes chances qu'elle soit différente d'un lancement de programme à l'autre. On l'utilise donc courrament pour initialiser le générateur pseudo-aléatoire du C avec une valeur différente à chaque lancement :
srand((unsigned) time(NULL));
ce qui permet de démarrer le cycle de la séquence pseudo-aléatoire à un endroit difficilement prévisible, renforçant ainsi l'effet 'aléatoire' pour les jeux et autres programmes statistiques ... Détails ici.
L'affichage de la date ou de l'heure de fait grace à la fonction strftime() qui a été conçue pour ça. Elle attend l'adresse d'une structure tm, qu'il va donc falloir mettre à jour au préalable. On utilise pour ça la valeur retournée par time(), qui donne la datation courante sous la forme d'un entier et une des fonction localtime() ou gmtime() selon que l'on veut convertir en heure locale ou en heure GMT (Greenwich). En France, il y a une heure de différence.
L'usage précis de strftime() et de ses nombreux paramètres de formatage doit être étudié dans un document de référence.
#include <stdio.h> #include <time.h> int main (void) { /* lire l'heure courante */ time_t now = time (NULL); /* la convertir en heure locale */ struct tm tm_now = *localtime (&now); /* Creer une chaine JJ/MM/AAAA HH:MM:SS */ char s_now[sizeof "JJ/MM/AAAA HH:MM:SS"]; strftime (s_now, sizeof s_now, "%d/%m/%Y %H:%M:%S", &tm_now); /* afficher le resultat : */ printf ("'%s'\n", s_now); return 0; }
'29/01/2009 02:34:00' Process returned 0 (0x0) execution time : 0.054 s Press any key to continue.
Rédaction en cours ...
© Emmanuel Delahaye 2007-2009 | emmanuel dot delahaye at gmail dot com |
Up |
Home |
Forum |
Livre d'or