CALCULER LE TIMESTAMP

cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 - 23 août 2008 à 17:00
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008 - 24 août 2008 à 15:28
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/47705-calculer-le-timestamp

hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
24 août 2008 à 15:28
C'est cool, j'apprend plein de chose :p
Oui Brunews on peu... BRAVO

L'utilisé d'une telle source ?
"Je pense que cet algorithme peut être pratique pour ceux qui veulent créer un "mini systeme d'exploitation" pour à partir de ce timestamp créer une horloge système et retrouver n'importe quelle date exacte juste en enregistrant le timestamp."
Ou peut être un agenda ?

J'en sait rien, je vais essayer d'améliorer ma source en restant dans l'algo que j'ai monté, BRUNEWS, je met ton code aussi !
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
24 août 2008 à 12:57
Je l'ai pensser plus tard et je l'ai poster sur codyx on peut meme remplacer GetSystemTime, par GetSystemTimeAsFileTime..

Neo_Fr
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
24 août 2008 à 07:18
La valeur du 01/01/1970 ayant peu de chance de varier, on peut résumer la source à cela:
DWORD __stdcall GetTimeStamp(void)
{
SYSTEMTIME stTime;
FILETIME flTime;
QWORD qwSystemTime;
GetSystemTime(&stTime);
SystemTimeToFileTime(&stTime, &flTime);
qwSystemTime = *((QWORD*) &flTime);
return (DWORD) ((qwSystemTime - 0x19DB1DED53E8000) / 10000000);
}

se pose maintenant l'utilité d'une telle source.
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
24 août 2008 à 00:52
EHO
ce que j'ai appelé bIsYearBissextile était une variable et pas une fonction!
l'important était t.wYear%4
Neo_Fr Messages postés 653 Date d'inscription mardi 6 décembre 2005 Statut Membre Dernière intervention 10 novembre 2014 2
23 août 2008 à 23:13
Une version plus simple avec les apis:

typedef unsigned __int64 QWORD;

DWORD __stdcall GetTimeStamp(void)
{
SYSTEMTIME stTime;
FILETIME flTime;
QWORD qwSystemTime;
QWORD qwUnixTime;
DWORD dwTimeStamp;
GetSystemTime(&stTime);
SystemTimeToFileTime(&stTime, &flTime);
qwSystemTime = *((QWORD*) &flTime);
ZeroMemory(&stTime, sizeof(SYSTEMTIME));
stTime.wYear = 1970;
stTime.wMonth = 1;
stTime.wDay = 1;
SystemTimeToFileTime(&stTime, &flTime);
qwUnixTime = *((QWORD*) &flTime);
dwTimeStamp = ((qwSystemTime-qwUnixTime) / 10000000);
return dwTimeStamp;
}

int main(void)
{
printf("%i\n", GetTimeStamp());
system("PAUSE");
return 0;
}

Neo_Fr
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
23 août 2008 à 22:42
Je ne parles en aucun cas de "connaiçances avancée" et partout où j'ai présenté ce projet, j'ai été surprit de découvrir que personne ne sait qu'une année bisextile est multiple de 4.

Oui, en effet ça m'a l'air d'être plus clair ainsi mais n'ayant pas de grandes connaissances en C/C++ je ne connaissait pas "IsYearBissextile", ça parait plus logique SAUF si le systeme ne conait pas une fonction pour (ainsi comme je le disais) il n'y a pa besoin de fonctions spéciales pour cet algorithme. Sinon je ne me serais pas embêté : tout comme en php, il existe une fonction pour avoir le Timestamp !


Merci encore de t'être expliqué !

A bientôt !
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
23 août 2008 à 21:22
"Serais tu cabable de trouver si une année est bisextile ou non en ayant juste l'année ?"

ben ouais pourquoi, pas toi? L'année est bissextile si multiple de 4 et pas multiple de 400 (mais bon, pas besoin de ce dernier critère dans ton code); d'un point de vue C, tout simplement : bool bIsYearBissextile=!(t.wYear%4);

Quant aux connaissances, je maintiens ce que j'ai dit. Je disais cela simplement pour que tu te rendes compte que c'était un peu ridicule de parler de connaissances avancées.

Et puisque tu veux des suggestions :
concernant le calcul (justement) du temps correspondant aux années, tu te contentes d'additionner les jours en incrémentant les années. Cela n'est pas optimal du tout, il y a moyen de faire le calcul directement. Comme tu sais qu'une année sur 4 est bissextile, il te suffit de définir un intervalle multiple de 4 entre tes années départ et arrivée, de le diviser par 4, de multiplier le résultat par le nombre de jours écoulés en 4 ans (soit 3*365+366=1461), et pour finir de rajouter les années qui dépassent : ton intervalle n'est pas nécessairement multiple de 4, donc il y en a au maximum 3 qui restent : avoue que c'est quand même plus rapide.
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
23 août 2008 à 21:11
Merci !!!
J'essayerais de corriger cela demain !
gamemonde Messages postés 336 Date d'inscription samedi 9 août 2003 Statut Membre Dernière intervention 9 juillet 2011 2
23 août 2008 à 20:10
Bon voila un petit default tu as trop de if

pour tes mois si tu utilisais un tableau contenant le nombre de seconde ou tout simplement le nombre de jour du mois , tu pourrais utilisé une boucle

for ( int i = 0; i < dtm,i++)
{
tts + = ....
}

ce qui rendrais tes if qui font environ 40 lignes en moin de dix lignes

ensuite tu uilises que des variables globales . ton code en a pas besoin mais tout tes variables dans ta fonction timestamp et retourne la valeur de tts

int main()
{
int iTimeStamp = timestamp();
....
}

}
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
23 août 2008 à 18:22
Désolé de double poster mais à mon avis si tous "gens visitant ce site sont capables de comprendre quelques additions et multiplications" et de monter un algorithme pouvant calculer si une anné est bisextile, il y aurait des dixaine et des dixaine de sources de Timestamp. Ce n'est pas le cas la mienne est la premiere.

Bonne soirée ;)
hazkaal Messages postés 67 Date d'inscription dimanche 4 février 2007 Statut Membre Dernière intervention 4 novembre 2008
23 août 2008 à 17:49
Serais tu cabable de trouver si une année est bisextile ou non en ayant juste l'année ?La plupart des forums où j'ai présentés ce projet ne comprenaient pas ce calcul.

Je ne saisis pas bien si tes propos sont ironiques ou non et s'ils le sont où est l'aide demandée ; j'ai écrit "Je vous laisse regarder et commenter, n'hésitez pas à m'expliquer les défaults !!!" ainsi tes commentaires qui ne sont pas susceptibles de m'aider dans ce projet, merci de les oublier.

A bientôt.

Cordialement.
HazKaaL
cs_juju12 Messages postés 966 Date d'inscription samedi 3 avril 2004 Statut Membre Dernière intervention 4 mars 2010 4
23 août 2008 à 17:00
"nécésite des connaissances approfondies en mathématiques"
par rapport à un élève de primaire, peut-être.
mais la plupart des gens visitant ce site sont capables de comprendre quelques additions et multiplications je pense.
Rejoignez-nous