Vous êtes sur la page 1sur 43

Table of Contents

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 1/1
Les Bibliothèque time.h et local.h
L’essentiel à savoir :)

Andy DEGBEGNI Honorat KPATOUKPA

Institut de Mathématique et de Science Physique de DANGBO


Licence Informatique

Novembre 2020

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 2/1
Introduction

La bibliothèque time.h fais partie des bibliothèque standards en C. C’est


une bibliohèque qui aide pricipalement à la gestion de temps.
Que ce soit pour créer une attente ou afficher la date pendant l’exécution
d’un programme il existe plusieurs fonctions dans cette bibliothèques pour
ce faire.
En ce qui concerne les types de variables, il y en a essentiellement quatre
(04) ce sont :
size t

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 3/1
Introduction

La bibliothèque time.h fais partie des bibliothèque standards en C. C’est


une bibliohèque qui aide pricipalement à la gestion de temps.
Que ce soit pour créer une attente ou afficher la date pendant l’exécution
d’un programme il existe plusieurs fonctions dans cette bibliothèques pour
ce faire.
En ce qui concerne les types de variables, il y en a essentiellement quatre
(04) ce sont :
size t
clock t

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 3/1
Introduction

La bibliothèque time.h fais partie des bibliothèque standards en C. C’est


une bibliohèque qui aide pricipalement à la gestion de temps.
Que ce soit pour créer une attente ou afficher la date pendant l’exécution
d’un programme il existe plusieurs fonctions dans cette bibliothèques pour
ce faire.
En ce qui concerne les types de variables, il y en a essentiellement quatre
(04) ce sont :
size t
clock t
time t

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 3/1
Introduction

La bibliothèque time.h fais partie des bibliothèque standards en C. C’est


une bibliohèque qui aide pricipalement à la gestion de temps.
Que ce soit pour créer une attente ou afficher la date pendant l’exécution
d’un programme il existe plusieurs fonctions dans cette bibliothèques pour
ce faire.
En ce qui concerne les types de variables, il y en a essentiellement quatre
(04) ce sont :
size t
clock t
time t
struct tm

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 3/1
La structure de temps struct tm
struct tm est une structure de temps qui contienent plusieures variables
permettant de manipuler de facon plus aisée les dates. Ainsi, il est donc
relativement facile de stocker un instant mais utilisant les différentes
unités et informations que l’on emploie i.e par exemple l’année, le mois, le
jour du mois, le jour de la semaine, l’heure, la minute, la seconde et bien
d’autres informations permettant de decrire de facon optimale un instant
donné. Nous y reviendrons plus tard.
Comme decrite plus haut la structure struct tm se presente comme suit :
1 struct tm {
2 int tm_sec ; /* seconds , range 0 to 59 */
3 int tm_min ; /* minutes , range 0 to 59 */
4 int tm_hour ; /* hours , range 0 to 23 */
5 int tm_mday ; /* day of the month , range 1 to 31 */
6 int tm_mon ; /* month , range 0 to 11 */
7 int tm_year ; /* The number of years since 1900 */
8 int tm_wday ; /* day of the week , range 0 to 6 */
9 int tm_yday ; /* day in the year , range 0 to 365 */
10 int tm_isdst ; /* daylight saving time */ };
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 4/1
La structure de temps struct tm (suite)

tm isdst est une variable assez particulière qui indique la saison.


De facon standard elle sontient -1 si l’information est indisponible, 0 si
c’est l’heure d’hiver et +1 si c’est l’heure d’été.
Voici un code en guise d’example d’utilisation de la structure struct tm :
1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 struct tm instant ;
7 int remplir ;
8
9 printf ( " Entrez le mois : " ) ;
10 scanf ( " % d " , & remplir ) ;
11 instant . tm_mon = remplir -1;

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 5/1
La structure de temps struct tm (suite)
1 printf ( " Entrez le jour : " ) ;
2 scanf ( " % d " , & remplir ) ;
3 instant . tm_mday = remplir -1;
4
5 printf ( " Entrez l ’ heure : " ) ;
6 scanf ( " % d " , & remplir ) ;
7 instant . tm_hour = remplir ;
8
9 printf ( " Entrez la minute : " ) ;
10 scanf ( " % d " , & remplir ) ;
11 instant . tm_min = remplir ;
12
13 printf ( " Entrez la seconde : " ) ;
14 scanf ( " % d " , & remplir ) ;
15 instant . tm_sec = remplir ;
16
17 printf ( " % d /% d ; % d :% d :% d " , instant . tm_mday +1 , instant .
tm_mon +1 , instant . tm_hour , instant . tm_min , instant
. tm_sec ) ;
18 return 0; }
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 6/1
La structure de temps struct tm (suite et fin)

Après compilation du programme exemple ci-dessus on obtient une


exéction a peu près comme ce ci :
1 Entrez le mois : 11
2 Entrez le jour : 10
3 Entrez l ’ heure : 0
4 Entrez la minute : 0
5 Entrez la seconde : 0
6
7
8 10/11 ; 0:0:0

Il beaucoup plus pratique d’utiliser un pointeur vers un élément de type


struct tm plutôt qu’une struct tm directement car les fonctions de time.h
renvoient des pointeurs et non la structure pointée. Ainsi donc, prioriser
l’utilisation des pointeurs plutot que le remplisage manuel oppéré dans
l’exemple précedent.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 7/1
La fonction clock() : Situer son programme dans le temps

La fonction clock() permet de situer un programme dans le temps. De


prototype :

1 clock_t clock ( void ) ;

est une fonction qui ne prend aucun argument et retourne un nombre de


type clock t ce type permettant d’exprimer le nombre de ”coup” ou
”battement” d’horloge (clock tick en anglais).
Le clock tick étant une unité de temps de l’ordinateur, elle varie en
fonction du système d’exploitation et du processeur, mais peut etre
determiner grace au macro, disponible dans la biblothèque time.h,
CLOCKS PER SEC.
La fonction clock() peut eventuellement retournée la valeur -1 en cas
d’erreur durant son exécution.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 8/1
Quelques exemples d’utilisation de la fonction clock()
1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 printf ( " % f \ n " , ( double ) clock () ) ;
7 return 0;
8 }
Ce code est un programme qui affiche la valeur retournée par clock(). Le
transtipage effectué avant l’appel de la fonction permet de transformer les
clock t renvoyés en double afin d’éviter un warning. Le transtipage en
(int) marche, il arrive que ce type contienne un nombre décimal, alors il
est recommandé d’utiliser le %f avec un cast (double) ( transtipage en
(double) ). Cependant attention, ça ne marche pas dans tous les cas.
Après exécution du programme precedent, vous obtiendrai certainement :
0, car en effet, comme clock() est appelée dès le début, elle renvoie le
début du programme, soit 0 clock tick. Il va donc falloir mettre une
attente avant l’appel de clock() si vous voulez autre chose que 0.
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 9/1
Quelques exemples d’utilisation de la fonction clock()

D’où le programme suivant par exemple :


1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 getchar () ;
7
8 printf ( " % f \ n " , ( double ) clock () ) ;
9 return 0;
10 }

Un getchar() vous demandera d’appuyer sur la touche ” Entrée ” avant de


continuer et d’afficher la valeur renvoyée par clock(). Vous aurez
surement donc un résultat différent de 0.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 10 / 1
Quelques exemples d’utilisation de la fonction clock()
1 // clock () peut servir ainsi de chronometre . Un exemple
simple d ’ utilisation :
2
3 # include < stdio .h >
4 # include < stdlib .h >
5 # include < time .h >
6
7 int main ( void )
8 {
9 int mystere , nombreentre ;
10 clock_t temps ;
11
12 srand ( time ( NULL ) ) ;
13 mystere = rand () %100+1;
14
15 do {
16 puts ( " Quel est le nombre ? " ) ;
17 scanf ( " % d " , & nombreentre ) ;
18
19 if ( nombreentre > mystere )
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 11 / 1
Quelques exemples d’utilisation de la fonction clock()

1 puts ( " C ’ est moins !\ n " ) ;


2 if ( nombreentre < mystere )
3 puts ( " C ’ est plus !\ n " ) ;
4 if ( nombreentre == mystere )
5 {
6 temps = clock () ;
7 printf ( " Bravo !\ nTu as mis % f secondes a trouver
le nombre .\ n " , ( double ) temps / CLOCKS_PER_SEC ) ;
8 }
9 } while ( nombreentre != mystere ) ;
10
11 return 0;
12 }

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 12 / 1
Quelques exemples d’utilisation de la fonction clock()

Remarquez que l’utlisation du macro CLOCKS PER SEC dans


l’opération

1 temps / CLOCKS_PER_SEC

à la ligne 25 permet d’obtenir des secondes et non des clock ticks.


La sortie de ce programme pourrait ressembler à ca :
1 Quel est le nombre ?
2 61
3 Bravo !
4 Tu as mis 13.156000 secondes a trouver le nombre .

La fonction clock() peut servir à implémenter la fonction delay


permettant de retarder l’execution d’un programme d’une certaine unité de
temps généralement exprimée en secondes.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 13 / 1
Quelques exemples d’utilisation de la fonction clock()
1 void delay ( float temps )
2 {
3 clock_t arrivel_time = clock () +( temps * CLOCKS_PER_SEC ) ;
// On calcule le moment ou l ’ attente devra s ’ arreter
4
5 while ( clock () < arrivel_time ) ;
6 }

Utiliser dans un un code lambda on obtient ce genre de code :


1 # include < stdio .h >
2 # include < time .h >
3
4 void delay ( float temps )
5 {
6 clock_t arrive_time = clock () +( temps * CLOCKS_PER_SEC ) ; //
On calcule le moment ou l ’ attente devra s ’ arreter
7
8 while ( clock () < arivel_time ) ;
9 }

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 14 / 1
Quelques exemples d’utilisation de la fonction clock()
1 int main ( void )
2 {
3 int compteur ;
4
5 for ( compteur =10; compteur >0; compteur - -)
6 {
7 printf ( " % d ...\ n " , compteur ) ;
8 delay (1) ;
9 }
10
11 puts ( " BONNE ANNEE !!!\ n " ) ;
12
13 return 0;
14 }
Cette fonction bien qu’étant assez efficace en ce qui concerne l’effet
recherché est assez gourmande et donne beaucoup trop de travail au CPU
comparé aux fontions sleep() et Sleep() qui offrent globalement les memes
service et pouvant etre retrouvées respectivement dans les header unistd.h
(Linux et Mac uniquement) et windows.h sous windows probablement :).
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 15 / 1
Quelques exemples d’utilisation de la fonction clock()

Je vous laisse approfondir ces notions pour votre propre culture personelle
:).
Passons à fonction time()...

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 16 / 1
La fonction time() : Obtenir la date et l’heure
La fonction time() est souvent utilisée dans la génération de nombres
pseudo-aléatoire. De prototype

1 time_t time ( time_t * variable ) ;

elle prend en argument un pointeur sur un élement de type time t et


retourne un élélent de meme type qui sert à indiquer un nombre de
secondes.
La valeur renvoyée correspond au nombre de secondes écoulées depuis le
début du calendrier qui sur la plupart des systèmes d’exploitation
corespond au le premier janvier 1970.
Il est possible que time() retourne -1.
Si c’est le cas, c’est qu’elle n’a pas réussi à récupérer la valeur de temps.
Note
: Avec time() faire variable=time(NULL); revient à faire time(&variable);.
la fonction retournera dans les deux cas la fonction mettra la valeur à
Andyrenvoyer dansde Mathématique
, Honorat (Institut la variable ”Science
et de variable ”.de DANGBO Licence Informatique) Novembre 2020 17 / 1
Physique
time.h
La fonction time() : Obtenir la date et l’heure

Note
srand() est une fonction qui demande un nombre pour son initialisation et
genère une suite de nombre aléaroire autour de ce nombre. Quand on lui
donne le meme nombre initial, elle génère la même suite de nombres à
chaque fois. On utilise donc le temps car il est très rare de lancer deux fois
le même programme dans la même seconde.

Voici un exemple assez simple d’utilisation de la fonction time() :

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 18 / 1
Exemple d’utilisation de la fonction time()

1 # include < stdio .h >


2 # include < time .h >
3
4 int main ( void )
5 {
6 printf ( " Il s ’ est ecoule % f secondes depuis le 1 er
janvier 1970.\ n " , ( double ) time ( NULL ) ) ;
7
8 return 0;
9 }
10
11 // La sortie de ce programme pourrait etre :
12
13 Il s ’ est ecoule 1298819112 secondes depuis le 1 er janvier
1970.
14
15 // Le nombre de seconde est variable en fonction du systeme
et de l ’ instant de compilation du programme .

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 19 / 1
localtime() : Utiliser ce qui est renvoyé par time() pour
remplir une struct tm
La fonction time() ne sert visiblement pas grand chose toute seule. Avec
la fonction localtime() va nous permettre d’utiliser time() pour remplir une
struct tm. Voici son prototype :

1 struct tm * localtime ( const time_t * secondes ) ;

Elle prend un nombre de secondes pour renvoyer un pointeur de type


struct tm. Pour ce faire on peut procède de la facon suivante :
1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 time_t secondes ;
7 struct tm instant ;
8
9 time (& secondes ) ;
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 20 / 1
Exemple d’utilisation de la fonction time()

1 instant =* localtime (& secondes ) ;


2 printf ( " % d /% d ; % d :% d :% d \ n " , instant . tm_mday +1 , instant .
tm_mon +1 , instant . tm_hour , instant . tm_min , instant .
tm_sec ) ;
3 return 0;
4 }
5
6 // La sortie de ce code varira en fonction de l ’ instant de
compilation .

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 21 / 1
La fonction gmtime() : Obtenir l’heure GMT
La fonction gmtime() permet de récupérer l’heure GMT.
Note
L’heure GMT, c’est l’heure qu’il est en Grande Bretagne. ( Voir ici, pour
plus de détails ).

Son prototype est le suivant :

1 struct tm * gmtime ( const time_t * temps ) ;

Cette fonction prend en paramètre le nombre de secondes depuis le 1er


janvier 1970 dans votre fuseau horaire (pas besoin de conversion) et
renvoie un element de type struct tm *. Pour les villes se trouvant sur de
faiseau GMT+X, le mieux cesr de pouvoir garder cette constante X et de
l’ajouter à la valeur retournée par gmtime(). Par exemple, Sydney se
trouve donc dans un fuseau horaire GST (GMT+10) et New York dans un
fuseau horaire EST (GMT-5). On peut donc procéder comme suit :
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 22 / 1
Exemple d’utilisation de la fonction gmtime()
1 # include < stdio .h >
2 # include < time .h >
3 # define SYD 10
4 # define NYC -5
5 int main ( void )
6 {
7 time_t temps ;
8 struct tm date ;
9 time (& temps ) ;
10 date =* gmtime (& temps ) ;
11
12 printf ( " GMT : % d :% d \ n " , date . tm_hour , date . tm_min ) ;
13 printf ( " Sydney : % d :% d \ n " , ( date . tm_hour + SYD +24) %24 , date
. tm_min ) ;
14 printf ( " New - York : % d :% d \ n " , ( date . tm_hour + NYC +24) %24 ,
date . tm_min ) ;
15 return 0;
16 }

Je vous laisse le soin de tester tout ca. :)


Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 23 / 1
Recapitulation

Jusqu’à maintenant avons parler des fonctions permettant principalement


de recupérer des données de temps. Maintenant nous parlerons des
fonctions permettant d’effectuer manipulations et calculs réalisables avec
les informations obtenues.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 24 / 1
Effectuer des manipulations avec les informations obtenues

Nous allons utiliser les informations obtenues pour effectuer quelques


manipulations. Nous allons principalement etdudiées les fonctions
difftime(), qui permet trouver l’intervalle entre deux moments, et
mktime(), aidant à compléter une struct tm à partir de seulement 3
variables et/ou exécuter le procédé inverse de localtime().

difftime() : Faire la différence entre deux instants


Imaginons que vous gérez une bibliotheque. Des gens viennent preter des
livres vous avez la date où ils ont contracté le pret. Sachant que le livre
doit etre ramener avant un certain delai mais comme vous etes aussi
paresseux que moi et que vous chercher un moyen pour vous alleger la
tache et bien pas de panique la fonction difftime() est là. Eh bien
difftime() fera automatiquement la différence entre le moment de pret du
livre et le moment de retour du livre et avous de voir si le delai est
respecter ou pas vu le resultat !

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 25 / 1
La fonction difftime() : Description et exemple

Voici sont prototype :


1 double difftime ( time_t arrivee , time_t depart ) ;

Et ici un exemple d’utilisation de difftime() :


1 # include < stdio .h >
2 # include < time .h >
3 int main ( void )
4 {
5 time_t depart , arrivee ;
6 time (& depart ) ;
7
8 puts ( " Tu peux maintenant aller faire autre chose ...\ n " ) ;
9 getchar () ;
10 time (& arrivee ) ;
11 printf ( " Tu t ’ es absente pendant % f secondes . " , difftime (
arrivee , depart ) ) ;
12 return 0;
13 }
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 26 / 1
La fonction difftime() : Description et exemple

Dans l’exemple précedent, on a considéré que vous souhaitiez battre le


record du monde du temps d’enfermement dans un carton. Voilà, vous
pouvez rentrer dans votre carton. Donc on initialise deux variables qui
stockeront le départ et l’arrivée et on donne la bonne valeur à  départ
 et un getchar() sert à faire une attente jusqu’à ce que l’utilisateur

appuie sur Entrée pour signifier qu’il est sorti du carton on donnera donc
la bonne valeur à  arrive .
Note
La fonction difftime() par rapport à clock() presente l’avantage de
retourner directement des secondes, mais pour des temps relativement
courts, il est beaucoup plus recommandé d’utiliser la fonction clock car
elle garentie une assez forte precision.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 27 / 1
mktime() : Compléter une struct tm
Il arrivera souvent qu’on remplisse une struct tm mais à moitié. Et tout à
coup, vous avez besoin d’une valeur que vous n’avez pas remplie.
Comment la calculer ? Comme on est pas pret d’écrire tout un code pour
ca parce qu’on est paresseux et bien on utlise tout simplement la fonction
mktime() de prototype :

1 time_t mktime ( struct tm * structure ) ;

Cette fonction prend en paramètre une elément de type struct tm et


renvoie un element de type time t correspondant au nombre de secondes
corespondant à lélement de type struct tm pris en argument. Elle sert
aussi à remplir une struct tm incomplète à partir de ces trois valeurs :
1 tm year ;

2 tm mon ;

3 tm mday.

Toute les autres valeurs mises à part  tm hour ,  tm min  et


 tm sec  seront calculées à partir des trois variables précedement citées.
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 28 / 1
mktime() : Compléter une struct tm

Cette fonction permet notamment de savoir quel jour de la semaine on est


à partir du jour du mois, ou alors de connaı̂tre quel jour on sera dans x
jours. Nous allons dans l’exemple suivant savoir quel jour de l’année on est
à partir d’une date précise.
Note
Il est possible que mktime() retourne -1. Si c’est le cas, c’est qu’il y a eu
une erreur. Prévoyez ce cas dans vos futurs programmes.

Voici l’exemple :

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 29 / 1
Exemple d’utilisation de mktime()
1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 time_t temps ;
7 struct tm date ;
8 int remplir ;
9
10 // On demande a l ’ utilisateur de remplir les valeurs
demandees .
11 // Ne pas oublier d ’ additionner ou de soustraire les
bonnes valeurs pour eviter les decalages .
12 puts ( " Annee ? " ) ;
13 scanf ( " % d " , & remplir ) ;
14 date . tm_year = remplir -1900;
15
16 puts ( " Mois ? " ) ;
17 scanf ( " % d " , & remplir ) ;
18 date . tm_mon = remplir -1;
Andy , Honorat (Institut de Mathématique et de Science Physique
time.h
de DANGBO Licence Informatique) Novembre 2020 30 / 1
Exemple d’utilisation de mktime()

1 puts ( " Jour ? " ) ;


2 scanf ( " % d " , & remplir ) ;
3 date . tm_mday = remplir ;
4
5 // On s ’ assure que l ’ instant est bien place a minuit .
6 date . tm_hour =0;
7 date . tm_min =0;
8 date . tm_sec =0;
9
10 temps = mktime (& date ) ;
11
12 printf ( " C ’ est le % deme jour de l ’ annee !\ nEt minuit
correspond la % deme seconde depuis le 1 er janvier 1970.\
n " , date . tm_yday , ( int ) temps ) ;
13
14 return 0;
15 }

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 31 / 1
Exemple d’utilisation de mktime()

Note
mktime() remplit la struct tm avec deux jours de décalage en arrière pour
les jours de l’année. Je n’ai aucune idée de la cause de ce décalage ni s’il
est présent sur tous les systèmes, mais si c’est le cas chez vous (vous
pouvez vérifier avec le lien ), vous pouvez régler ce problème en changeant
la valeur de tm yday après l’usage de mktime() dans le programme
precedent.
1 temps = mktime (& date ) ;
2 date . tm_yday +=2;

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 32 / 1
Exemple d’utilisation de mktime()

1 puts ( " Jour ? " ) ;


2 scanf ( " % d " , & remplir ) ;
3 date . tm_mday = remplir ;
4
5 // On s ’ assure que l ’ instant est bien place a minuit .
6 date . tm_hour =0;
7 date . tm_min =0;
8 date . tm_sec =0;
9
10 temps = mktime (& date ) ;
11
12 printf ( " C ’ est le % deme jour de l ’ annee !\ nEt minuit
correspond la % deme seconde depuis le 1 er janvier 1970.\
n " , date . tm_yday , ( int ) temps ) ;
13
14 return 0;
15 }

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 33 / 1
Afficher l’heure obtenue

A présent nous allons nous interesser aux fonctions qui permettent


d’effectuer un affichage dans un format assez pratiques les dates receuillies
par les fonctions citées plus haut. Cela peut se faire avec un printf() mais
pourquoi faire ca soit meme si l’ordinateur peut le faire pour nous ? M
Pour ce faire nous allons utiliser la fonction asctime de prototype :

1 char * asctime ( const struct tm * instant ) ;

Cette fonction permmet de transformer une struct tm en char[], c’est à


dire mettre en forme le contenu de la struct tm et stocker le résultat dans
une chaı̂ne de caractères. La mise en forme obtenue est la suivante :
Jjj Mmm jm hh:mm:ss aaaa.

Notez que l’affichage se fait en Anglais.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 34 / 1
Afficher l’heure obtenue

Voilà à peu près comment ca s’utilise


1 # include < stdio .h >
2 # include < time .h >
3
4 int main ( void )
5 {
6 time_t temps ;
7 struct tm date ;
8
9 time (& temps ) ;
10 date =* localtime (& temps ) ;
11
12 printf ( " % s \ n " , asctime (& date ) ) ;
13
14 return 0;
15 }

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 35 / 1
Afficher l’heure obtenue

La sortie de ce programme ressemblera a ca


Tue Dec 1 21:39:40 2020
Avec ca on peut s’amuser à programmer une horloge n’est ce pas ? Pour
ce faire nous utiliserons la fonction delay() programmer un peu plus haut.
on obtiendra donc :

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 36 / 1
Code d’implementation d’une horlorge

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 37 / 1
La bibliothèque locale.h

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 38 / 1
Conclusion

Conclusion
Plusieurs autres fonctions interessentes comme ctime() ou encore
strftime() sont assez pratiques pour faire du formatage de dates maos elles
sont malheurement des fonctions de la biblothèque ctime.hqui et une
bibliotheque du langage C++. Vous pourrez toujours aller vous enquérir
d’avantage sur ces fonctions s’il vous en prend l’envie.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 39 / 1
Ceci marque la fin de notre presentation.
Merci pour vore aimable attention.

Andy , Honorat (Institut de Mathématique et de Science Physique


time.h
de DANGBO Licence Informatique) Novembre 2020 40 / 1

Vous aimerez peut-être aussi