Bonjour,
Voici le contexte : dans le cadre d'une modification de firmware (je travaille sur microcontrôleur), faute de place j'ai voulu remplacer les fonctions difftime et mktime afin
de les réduire a l'utilisation que j'en ai et pour réduire la taille du code ( la bibliothèque chargée pèse plus de 18Ko dans la flash). Donc j'ai fait mes fonctions, et afin de
valider j'ai commencé a proceder a un test unitaire avec visualStudio 2019 et un projet C++ ... en bref ... je fais de la merde ... quoique :
j'ai 2 exemples qui fonctionne avec mes fonctions ... mais pas le couple difftime / mktime ... d'ou mon interrogation.
Je pars sur une différence de 1 journée et 1 seconde ... l'un sur le meme mois ... l'autre a 1 mois d'interval avec 2 jours et 1s .. selon ceci ( pas de test unitaire , juste mise en evidence de mon souci )
le resultat est celui ci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80 debutcoupure.tm_mday = 30; debutcoupure.tm_mon = 1; debutcoupure.tm_year = 100; debutcoupure.tm_hour = 9; debutcoupure.tm_min = 58; debutcoupure.tm_sec = 0; fincoupure.tm_mday = 31; fincoupure.tm_mon = 1; fincoupure.tm_year = 100; fincoupure.tm_hour = 9; fincoupure.tm_min = 58; fincoupure.tm_sec = 1; mktime(&fincoupure); mktime(&debutcoupure); int TempsCoupureSec = difftime(mktime(&fincoupure), mktime(&debutcoupure)); int TempsCoupureMn = (int)TempsCoupureSec/ 60; //temps d arret en minute cout << TempsCoupureSec << "\t/\t" << TempsCoupureMn << "\r\n"; debutcoupure.tm_mday = 30; debutcoupure.tm_mon = 1; debutcoupure.tm_year = 100; debutcoupure.tm_hour = 9; debutcoupure.tm_min = 58; debutcoupure.tm_sec = 0; fincoupure.tm_mday = 31; fincoupure.tm_mon = 1; fincoupure.tm_year = 100; fincoupure.tm_hour = 9; fincoupure.tm_min = 58; fincoupure.tm_sec = 1; TempsCoupureSec = _diff(fincoupure, debutcoupure); TempsCoupureMn = (int)TempsCoupureSec / 60; //temps d arret en minute cout << TempsCoupureSec << "\t/\t" << TempsCoupureMn << "\r\n"; cout << "**************************************************************\r\n"; //-------------------------------------------------------------------------------------// //-------------------------------------------------------------------------------------// debutcoupure.tm_mday = 30; debutcoupure.tm_mon = 1; debutcoupure.tm_year = 100; debutcoupure.tm_hour = 9; debutcoupure.tm_min = 58; debutcoupure.tm_sec = 0; fincoupure.tm_mday = 1; fincoupure.tm_mon = 2; fincoupure.tm_year = 100; fincoupure.tm_hour = 9; fincoupure.tm_min = 58; fincoupure.tm_sec = 1; TempsCoupureSec = difftime(mktime(&fincoupure), mktime(&debutcoupure)); TempsCoupureMn = (int)TempsCoupureSec / 60; //temps d arret en minute cout << TempsCoupureSec << "\t/\t" << TempsCoupureMn << "\r\n"; debutcoupure.tm_mday = 30; debutcoupure.tm_mon = 1; debutcoupure.tm_year = 100; debutcoupure.tm_hour = 9; debutcoupure.tm_min = 58; debutcoupure.tm_sec = 0; fincoupure.tm_mday = 1; fincoupure.tm_mon = 2; fincoupure.tm_year = 100; fincoupure.tm_hour = 9; fincoupure.tm_min = 58; fincoupure.tm_sec = 1; TempsCoupureSec = _diff(fincoupure, debutcoupure); TempsCoupureMn = (int)TempsCoupureSec / 60; //temps d arret en minute cout << TempsCoupureSec << "\t/\t" << TempsCoupureMn << "\r\n";
DIFFTIME : 86401 / 1440
MA FONCTION : 86401 / 1440
**************************************************************
DIFFTIME : 1 / 0
MA FONCTION : 172801 / 2880
Le problème est le même si je l'implémente dans mon µC
Alors ... je n'ai pas la prétention d'avoir trouvé un BUG que personne n'a vu car il est tellement gros que j'en suis le premier étonné .. Mais si quelqu'un peut
me dire ou est mon erreur ? ou ce que je comprend mal ?
Merci d'avance et bonne dev à tous
Partager