Hoe de huidige tijdstempel in milliseconden te krijgen sinds 1970, precies zoals Java

In Java kunnen we System.currentTimeMillis()gebruiken om de huidige tijdstempel in milliseconden te krijgen sinds de tijd van de tijd,

Het verschil, gemeten in milliseconden, tussen de huidige tijd en
Midnight, 1 januari 1970 UTC.

In C++ Hoe krijg je hetzelfde?

Momenteel gebruik ik dit om de huidige tijdstempel te krijgen –

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;

Dit ziet er goed uit of niet?


Antwoord 1, Autoriteit 100%

Als u toegang hebt tot de C++ 11-bibliotheken, bekijk dan de std::chronobibliotheek. Je kunt het gebruiken om de milliseconden te krijgen sinds het UNIX-tijdperk zoals dit:

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

Antwoord 2, Autoriteit 16%

Gebruik <sys/time.h>

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

Verwijs dit .


Antwoord 3, Autoriteit 10%

Dit antwoord is vrij vergelijkbaar met oz. ”s , met <chrono>Voor C++ – Ik pakte het niet van Oz. Hoewel …

Ik heb het originele fragment opgehaald op de onderaan deze pagina , en enigszins gewijzigd om het een compleet te zijn Console-app. Ik ben dol op het gebruik van dit lil ‘ol’ ding. Het is fantastisch als je veel scripting doet en een betrouwbaar hulpmiddel in Windows nodig hebt om het tijdperk in werkelijke milliseconden te krijgen zonder toevlucht te nemen tot het gebruik van VB, of een minder moderne, minder lezer-vriendelijke code.

#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;
}

Antwoord 4, Autoriteit 9%

Sinds C++ 11 U kunt gebruiken std::chrono:

  • Krijg huidige systeemtijd: std::chrono::system_clock::now()
  • Krijg tijd sinds tijdperk: .time_since_epoch()
  • Vertaal de onderliggende eenheid naar milliseconden: duration_cast<milliseconds>(d)
  • Vertaal std::chrono::millisecondsNaar gehele getal (uint64_tom overloop te voorkomen)
#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;
}

Antwoord 5, Autoriteit 4%

Als u GetTimeOfDay gebruikt, moet u langlang lang overbruggen, anders krijg je overloop en dus niet het echte aantal milliseconden sinds het tijdperk:
LANGE INT MSINT = TP.TV_SEC * 1000 + TP.TV_USEC / 1000;
zal u een cijfer geven zoals 767990892 dat rond 8 dagen na het tijdperk is; -).

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;
}

Antwoord 6

Inclusief <ctime>en gebruik de time-functie.

Other episodes