196 votes

Comment obtenir le timestamp actuel en millisecondes depuis 1970 comme le fait Java

En Java, nous pouvons utiliser System.currentTimeMillis() pour obtenir l'horodatage actuel en millisecondes depuis l'époque, qui est -

la différence, mesurée en millisecondes, entre l'heure actuelle et minuit, le 1er janvier 1970 UTC.

En C++ comment obtenir la même chose?

Actuellement, j'utilise ceci pour obtenir l'horodatage actuel -

struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; // obtenir l'horodatage actuel en millisecondes

cout << ms << endl;

Cela semble correct ou non?

353voto

Oz. Points 1140

Si vous avez accès aux bibliothèques C++ 11, consultez la std::chrono bibliothèque. Vous pouvez l'utiliser pour obtenir les millisecondes depuis l'Epoch Unix comme ceci :

#include 

// ...

using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
    system_clock::now().time_since_epoch()
);

57voto

Alessandro Pezzato Points 3762

Depuis C++11, vous pouvez utiliser std::chrono :

  • obtenir l'heure système actuelle : std::chrono::system_clock::now()
  • obtenir le temps écoulé depuis l'époque : .time_since_epoch()
  • traduire l'unité sous-jacente en millisecondes : duration_cast(d)
  • traduire std::chrono::milliseconds en entier (uint64_t pour éviter le dépassement)

    include

    include

    include

    uint64_t timeSinceEpochMillisec() { using namespace std::chrono; return duration_cast(system_clock::now().time_since_epoch()).count(); }

    int main() { std::cout << timeSinceEpochMillisec() << std::endl; return 0; }

49voto

Trying Points 4092

Utilisez

struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;

référez-vous à ce lien.

32voto

kayleeFrye_onDeck Points 3244

Cette réponse est assez similaire à celle d'Oz., en utilisant pour C++ -- Je ne l'ai pas copiée d'Oz. cependant...

J'ai trouvé le fragment original en bas de cette page, et je l'ai légèrement modifié pour en faire une application console complète. J'adore utiliser ce petit truc. C'est fantastique si vous faites beaucoup de scripting et avez besoin d'un outil fiable sous Windows pour obtenir l'époque en millisecondes réelles sans avoir à recourir à VB, ou à un code moins moderne et moins lisible.

#include 
#include 

int main() {
    unsigned __int64 now = std::chrono::duration_cast(std::chrono::system_clock::now().time_since_epoch()).count();
    std::cout << now << std::endl;
    return 0;
}

14voto

rli Points 1243

Si vous utilisez gettimeofday, vous devez effectuer une conversion en long long sinon vous obtiendrez des débordements et donc pas le nombre de millisecondes depuis l'époque :

long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000;

vous donnera un nombre comme 767990892 qui est environ 8 jours après l'époque ;-).

int main(int argc, char* argv[])
{
    struct timeval tp;
    gettimeofday(&tp, NULL);
    long long mslong = (long long) tp.tv_sec * 1000L + tp.tv_usec / 1000; //obtenir l'horodatage actuel en millisecondes
    std::cout << mslong << std::endl;
}

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