Bonjour,
Existe-t-il la possibilté de formater un entier pour représenter un horaire ?
Par exemple
int myHour = 1200;
Affichage après printf 12:00
Merci
Version imprimable
Bonjour,
Existe-t-il la possibilté de formater un entier pour représenter un horaire ?
Par exemple
int myHour = 1200;
Affichage après printf 12:00
Merci
Pas à ma connaissance (mais je ne sais pas tout :?).
Par contre "int myHour = 1275;" tu le gères comment ?
L'utilisateur n'a pas le droit de le faire ou bien c'est à printf et son éventuel format de le gérer ?
C'est un peu plus compliqué que ça. Il faut une structure struct tm (<time.h>), initialiser les champs avec des valeurs valides, mettre les champs voulus à la valeur voulue (heures, minutes, secondes), appeler mktime() qui va mettre de l'ordre dans tout ça, puis appeler strftime() pour formater la chaine. Enfin, afficher la chaine.
Code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 #include <stdio.h> #include <time.h> int main (void) { time_t t = time (NULL); struct tm tm = *localtime (&t); tm.tm_hour = 12; tm.tm_min = 00; tm.tm_sec = 00; { t = mktime (&tm); if (t != (time_t) - 1) { char s[16]; strftime (s, sizeof s, "%H:%M", &tm); printf ("'%s'\n", s); } } return 0; }
Mais ce qui est rigolo, c'est que mktime() fait un vrai travail de normalisation. Si tu metsCode:
1
2
3
4
5 '12:00' Process returned 0 (0x0) execution time : 0.040 s Press any key to continue.
ce code sort :Code:
1
2
3 tm.tm_hour = 12; tm.tm_min = 75; tm.tm_sec = 00;
75 = 60 + 15Code:
1
2
3
4 '13:15' Process returned 0 (0x0) execution time : 0.025 s Press any key to continue.
soit 1:15.
12:00 + 1:15 = 13:15
Précisons tout de même que pour résoudre ce cas en particulier (et pas faire une solution générale), un simple
... suffit. Évidemment, ça implique un certain nombre de prérequis (on voit tous lesquels), mais ça répond à la question initiale.Code:printf ("%02d:%02d\n",myTime/100,myTime%100);