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.

Home

Description des fonctions de gestion du temps en C

Introduction

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>

Les éléments principaux et utiles de <time.h>

Eléments de <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

haut


Usages

Lire l'heure courante

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.

Afficher l'heure courante

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 ...

Conclusion


Valid XHTML 1.0! Valid CSS! Get Firefox!  Use OpenOffice.org Club d'entraide des développeurs francophones Code::Blocks
© Emmanuel Delahaye 2007-2009 | emmanuel dot delahaye at gmail dot com | Up | Home | Forum | Livre d'or