Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Gestion du temps sous Windows

2 réponses
Avatar
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

2 réponses

Avatar
Christian ASTOR
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;
Avatar
Roger

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+