IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C++ Discussion :

Time sous Windows


Sujet :

C++

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut Time sous Windows
    Bonjour, voici mon pb je doit calculer le nombre de milliseconde depuis le début de l'année. Voici mon code sous linux simple qui fonctionne parfaitement :

    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
     
            // debut du calcul du temps de depart
            long long dateDebutSec;
            long double dateMax;
            long double dateDebutMSec;
            struct timeval timeV;
            struct tm * timeinfo;
            time_t rawtime;
            gettimeofday(&timeV, NULL);
            time(&rawtime);
            timeinfo = localtime(&rawtime);
            timeinfo -> tm_mon = 0;
            timeinfo -> tm_mday = 1;
            timeinfo ->tm_hour = 0;
            timeinfo ->tm_min = 0;
            timeinfo ->tm_sec = 0;
            // on soustrait le nombre de secondes
            // entre le 01/01/1970 et le 01/01 de l'annee en cours
            dateDebutSec =    timeV.tv_sec - mktime(timeinfo);
            dateDebutMSec =  ((int)(timeV.tv_usec / 1000)) / 1000.0;
            dateMax = dateDebutSec + dateDebutMSec;
            // la date de debut sera donc le nb de sec (avec la precision de la milli sec)
            // ecoulees depuis le debut de l'annee
    Jusque l'a aucun problème. Maintenant j'essaye de faire la même chose sous Windows en utilisant des fonctions Windows tel que GetSystemTime et GetLocalTime. Je me rends compte que ces fonctions ne s'utilisent absolument pas comme sous Linux. Ce qui parait a peu près normal vu de très très loin et avec beaucoup d'alcool. Est ce qu'il existe des fonctions équivalentes sous Windows qui me permettrai de faire calculer le nombre de milliseconde depuis le début de l'année? Je pense notamment à la classe Time que j'ai vu sur msdn, mais c'est tellement peu pratique ce site que je n'ai pas réussit à trouver qu'elle header je doit inclure. (time.h déjà essayé). Si vous vous y connaissez un peu en gestion de temps sous Windows. Merci d'avance pour votre aide.

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    134
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2006
    Messages : 134
    Points : 61
    Points
    61
    Par défaut
    Bon ben au final j'ai tout refait spécialement pour Windows

    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
      SYSTEMTIME timeV;
      GetLocalTime(&timeV);
      bool bissextile = false;
      if ( timeV.wYear%400 == 0)
        bissextile= true;
      for(int i=0; i<timeV.wMonth;i++)
      {
        if( timeV.wMonth%2!=0)
          dateMax += timeV.wMonth * 86400 * 31;
        else
        {
          if( bissextile==true && timeV.wMonth ==2)
            dateMax += timeV.wMonth * 86400 * 29;
          else if( bissextile==false && timeV.wMonth ==2)
            dateMax += timeV.wMonth * 86400 * 28;
          else if(timeV.wMonth !=2)
            dateMax += timeV.wMonth * 86400 * 28;
        }
      }
      dateMax += timeV.wDay * 86400;
      dateMax += timeV.wHour * 3600;
      dateMax += timeV.wMinute * 60;
      dateMax += timeV.wSecond;
      dateMax = dateMax * 1000 + timeV.wMilliseconds;
    moralité vaut mieux un plus tot que l'autre

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 0
    Dernier message: 26/02/2014, 19h23
  2. Assembleur sous Windows et sous Linux
    Par Bibouda dans le forum x86 32-bits / 64-bits
    Réponses: 3
    Dernier message: 28/10/2002, 07h55
  3. Tester connexion Internet active sous Windows
    Par Altau dans le forum Développement
    Réponses: 3
    Dernier message: 12/08/2002, 12h43
  4. Pas de fork sous Windows?
    Par chezjm dans le forum POSIX
    Réponses: 8
    Dernier message: 11/06/2002, 12h15
  5. OmniORB : code sous Windows et Linux
    Par debug dans le forum CORBA
    Réponses: 2
    Dernier message: 30/04/2002, 17h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo