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, je l'utilise pour obtenir l'horodatage actuel -
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000; //get current timestamp in milliseconds
cout << ms << endl;
Cela semble juste ou pas?
Si vous avez accès aux bibliothèques C++ 11, consultez la bibliothèque std::chrono
. Vous pouvez l'utiliser pour obtenir les millisecondes depuis l'époque Unix comme ceci:
_#include <chrono>
// ...
using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
system_clock::now().time_since_Epoch()
);
_
utiliser <sys/time.h>
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
se référer this .
Cette réponse est assez similaire à Oz. , en utilisant <chrono>
pour C++ - je ne l'ai pas saisie d'Oz. bien que...
J'ai récupéré l'extrait de code original au bas de cette page et l'ai légèrement modifié pour qu'il devienne une application de console complète. J'aime utiliser ce petit truc. C'est fantastique si vous utilisez beaucoup de scripts et que vous avez besoin d'un outil fiable sous Windows pour obtenir Epoch en quelques millisecondes sans recourir à VB, ou à du code moins moderne et moins convivial.
#include <chrono>
#include <iostream>
int main() {
unsigned __int64 now = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_Epoch()).count();
std::cout << now << std::endl;
return 0;
}
Si vous utilisez gettimeofday, vous devez lancer trop longtemps, sinon vous obtiendrez des débordements et donc pas le nombre réel de millisecondes écoulées depuis l'époque: long int msint = tp.tv_sec * 1000 + tp.tv_usec/1000; vous donnera un numéro comme 767990892 qui est rond 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; //get current timestamp in milliseconds
std::cout << mslong << std::endl;
}
Depuis C++ 11, vous pouvez utiliser std::chrono
:
std::chrono::system_clock::now()
.time_since_Epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
en entier (uint64_t
pour éviter les débordements)#include <chrono>
#include <cstdint>
#include <iostream>
uint64_t timeSinceEpochMillisec() {
using namespace std::chrono;
return duration_cast<milliseconds>(system_clock::now().time_since_Epoch()).count();
}
int main() {
std::cout << timeSinceEpochMillisec() << std::endl;
return 0;
}