52 votes

c ++ boost obtenir l'heure actuelle en millisecondes

J'ai besoin dans mon thread (avec boost :: thread) de récupérer l'heure actuelle en ms ou moins et de la convertir en ms:

en fait, en lisant ici, j'ai trouvé ceci:

 tick = boost::posix_time::second_clock::local_time();
now  = boost::posix_time::second_clock::local_time();
 

et semble fonctionner, mais après je dois avoir une longue valeur des millisecondes de maintenant ... comment puis-je faire? Merci d'avance

68voto

mkaes Points 6867

Vous pouvez utiliser boost::posix_time::time_duration pour obtenir l'intervalle de temps. E. g comme ceci

boost::posix_time::time_duration diff = tick - now;
diff.total_milliseconds();

Et pour obtenir une résolution plus élevée, vous pouvez modifier l'horloge que vous utilisez. Par exemple, à l' boost::posix_time::microsec_clock, mais cela peut être OS dépendante. Sur Windows, par exemple, boost::posix_time::microsecond_clock a milisecond résolution, pas de la microseconde.

Un exemple qui est un peu dépendant du matériel.

int main(int argc, char* argv[])
{
    boost::posix_time::ptime t1 = boost::posix_time::second_clock::local_time();
    boost::this_thread::sleep(boost::posix_time::millisec(500));
    boost::posix_time::ptime t2 = boost::posix_time::second_clock::local_time();
    boost::posix_time::time_duration diff = t2 - t1;
    std::cout << diff.total_milliseconds() << std::endl;

    boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time();
    boost::this_thread::sleep(boost::posix_time::millisec(500));
    boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time();
    boost::posix_time::time_duration msdiff = mst2 - mst1;
    std::cout << msdiff.total_milliseconds() << std::endl;
    return 0;
}

Sur mon win7 machine. Le premier est soit 0 ou 1 000. Deuxième résolution. Le second est presque toujours 500, en raison de la résolution élevée de l'horloge. J'espère que vous aider un peu.

13voto

Brian O'Kennedy Points 824

Si vous voulez dire millisecondes depuis l'époque vous pourriez faire

 ptime time_t_epoch(date(1970,1,1)); 
ptime now = microsec_clock::local_time();
time_duration diff = now - time_t_epoch;
x = diff.total_milliseconds();
 

Cependant, ce que vous recherchez n’est pas particulièrement clair.

Regardez l'exemple dans la documentation de DateTime à la date de démarrage de l'heure

8voto

Macbeth's Enigma Points 160
// Get current date/time in milliseconds.
#include "boost/date_time/posix_time/posix_time.hpp"
namespace pt = boost::posix_time;

int main()
{
     pt::ptime current_date_microseconds = pt::microsec_clock::local_time();

    long milliseconds = current_date_microseconds.time_of_day().total_milliseconds();

    pt::time_duration current_time_milliseconds = pt::milliseconds(milliseconds);

    pt::ptime current_date_milliseconds(current_date_microseconds.date(), 
                                        current_time_milliseconds);

    std::cout << "Microseconds: " << current_date_microseconds 
              << " Milliseconds: " << current_date_milliseconds << std::endl;

    // Microseconds: 2013-Jul-12 13:37:51.699548 Milliseconds: 2013-Jul-12 13:37:51.699000
}

-8voto

user1476945 Points 40

Essayez ceci: importez les en-têtes mentionnés ci-dessus .. donne des secondes et des millisecondes seulement. Si vous avez besoin d'expliquer le code, lisez ce lien .

 #include <windows.h>

#include <stdio.h>

void main()
{

    SYSTEMTIME st;
    SYSTEMTIME lt;

    GetSystemTime(&st);
   // GetLocalTime(&lt);

     printf("The system time is: %02d:%03d\n", st.wSecond, st.wMilliseconds);
   //  printf("The local time is: %02d:%03d\n", lt.wSecond, lt.wMilliseconds);

}
 

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X