En Java, nous pouvons utiliser System.currentTimeMillis()
pour obtenir l'horodatage actuel en millisecondes depuis l'heure de 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; //get current timestamp in milliseconds
cout << ms << endl;
Cela semble correct ou pas?
steady_clock
progressera toujours en avant, c'est une vraie mesure du temps depuis son époque alors qu'ellesystem_clock
peut être une représentation du temps logique depuis l'époque. Pour chaque seconde intercalaire, les deux pourraient s'éloigner davantage en fonction de la mise en œuvre du système.system_clock
la même que celle de l'époque UNIX, mais la spécification dit seulement qu'il doit s'agir de l'horloge murale en temps réel du système. Il n'est pas nécessaire que lesteady_clock
corresponde à la réalité, seulement qu'il ne fasse que progresser.timeval
structures est ennuyeux).utilisation
<sys/time.h>
renvoyer ceci .
la source
Cette réponse est assez similaire à celle d' Oz , en utilisant
<chrono>
pour C ++ - je ne l'ai pas récupérée d'Oz. bien que...J'ai pris l'extrait d'origine au 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 scripts et que vous avez besoin d'un outil fiable dans Windows pour obtenir l'époque en millisecondes réelles sans recourir à VB, ou à un code moins moderne et moins convivial.
la source
-560549313
ce n'est pas juste, non?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
. J'ai changé çaint64_t
et ça marche! Merci beaucoup d'avoir demandé plus d'informations pour vous aider!unsigned long long
est plus portable et__int64
n'est disponible que sur MSVC.__int64
type en C ++ standard. On peut utiliser à lastd::int64_t
place.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 le débordement)la source
unsigned long long
au lieu deuint64_t
.unsigned long long
au lieu deuint64_t
? J'ai une préférence naturelle pour le type plus court à taperSi vous utilisez gettimeofday, vous devez lancer un long long sinon vous aurez des débordements et donc pas le nombre réel de millisecondes 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 ;-).
la source
Incluez
<ctime>
et utilisez latime
fonction.la source