Gestion du temps sous Windows

Le
Roger
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
Roger
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Christian ASTOR
Le #23259391
Roger a écrit :
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 ?



Pas besoin, c'est automatique.
SystemTimeToFileTime() puis soustraction et division par
une constante
const INT64 c_NanoSec100PerSec = 10000000I64;
Roger
Le #23259891

Pas besoin, c'est automatique.
SystemTimeToFileTime() puis soustraction et division par
une constante
const INT64 c_NanoSec100PerSec = 10000000I64;



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 approximatif pour les années mais pour le reste c'est OK
Ciao A+
Publicité
Poster une réponse
Anonyme