Gestion du temps

ArthurAuguste Messages postés 107 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 17 février 2018 - 5 avril 2011 à 11:17
ArthurAuguste Messages postés 107 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 17 février 2018 - 5 avril 2011 à 15:14
Bonjour,
Est-il possible de calculer des durées en C++ sous Windows.
J'ai vu GetLocalTime et SetLocalTime qui utilisent la structure SYSTEMTIME mais je ne vois pas comment calculer des durées avec ça.
Un exemple si je veux calculer le nombre de jours entre au hasard le 03/09/1984 à 8h00mn00s et aujourd'hui, il me faudrait une première fonction qui me donne le temps courant local pour aujourd'hui (en seconde ou millisecondes ou 100nanosecondes) depuis une date ancienne fixe et une seconde fonction qui me donne le temps qu'il s'est écoulé depuis la même date fixe jusqu'au temps local du 03/09/1984 à 8h00mn00s . C'est seulement ensuite que je pourrais calculer des durées.
Ces deux fonctions existent-elles sous l'API ?
Merci
P.S. Si elles n'existent pas, y a-t-il des fonctions équivalentes directement sous C ou C++
Re-merci

2 réponses

BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
5 avril 2011 à 11:57
Jette un oeil sur SystemTimeToFileTime() et fonctions associées.

ciao...
BruNews, MVP VC++
0
ArthurAuguste Messages postés 107 Date d'inscription lundi 7 février 2011 Statut Membre Dernière intervention 17 février 2018
5 avril 2011 à 15:14
Merci, entre-temps j'étais effectivement tombé dessus et j'ai fait ça:

Initialisations:
LARGE_INTEGER tempslargelocal;
LARGE_INTEGER tempslargedep;
FILETIME tempsfilesyst;
SYSTEMTIME tempssyst;
#define diviseur 10000000
LONG resultat;

Code:
GetSystemTime(&tempssyst);
SystemTimeToFileTime(&tempssyst, &tempsfilesyst);
tempslargelocal.LowPart=tempsfilesyst.dwLowDateTime;
tempslargelocal.HighPart=tempsfilesyst.dwHighDateTime;
tempssyst.wYear=anneeauchoix;
tempssyst.wMonth=moisauchoix;
tempssyst.wDayOfWeek=0;
tempssyst.wDay=jourauchoix;
tempssyst.wHour=0;
tempssyst.wMinute=0;
tempssyst.wSecond=0;
tempssyst.wMilliseconds=0;
SystemTimeToFileTime(&tempssyst, &tempsfilesyst);
tempslargedep.LowPart=tempsfilesyst.dwLowDateTime;
tempslargedep.HighPart=tempsfilesyst.dwHighDateTime;
resultat=(tempslargelocal.QuadPart-tempslargedep.QuadPart) / diviseur; // en secondes
resultat=resultat / 3600 / 24 / 365,25; // en années

C'est pas terrible pour les années mais pour le reste c'est OK
Ciao Thanks
0
Rejoignez-nous