3 votes

C++ l'heure actuelle du système en nanosecondes comme un entier long afin d'envoyer influxdb

J'ai besoin d'obtenir l'heure du système en nanosecondes et de l'envoyer à influxdb sous forme de timestamp. Je sais

std::chrono::high_resolution_clock::now()

donne le temps système actuel en nanosecodns mais je n'ai pas réussi à le convertir en types primitifs.

Lorsque je passe le code ci-dessous, je vois quelque chose comme 1970-01-09T... dans la base de données

std::chrono::high_resolution_clock::now().time_since_epoch().count()

2voto

Howard Hinnant Points 59526

Vous devez utiliser std::chrono::system_clock au lieu de high_resolution_clock . Seulement system_clock mesure de manière fiable le temps depuis l'époque 1970 (ce qui est ce que influxdb attendra).

Deuxièmement, system_clock n'est pas garanti pour mesurer le temps en unités de nanosecondes, mais vous pouvez corriger cela.

Voici comment obtenir la meilleure estimation du nombre de nanosecondes depuis 1970-01-01 00:00:00 UTC (à l'exclusion des secondes intercalaires, ce qui est normal et correct), et la mettre dans un type intégral signé de 64 bits :

using namespace std::chrono;
long long t = time_point_cast<nanoseconds>(system_clock::now()).time_since_epoch().count();

1voto

Jorge Bellón Points 1117

now() vous renvoie un point de temps . Vous devez le convertir en durée afin d'obtenir le nombre de nanosecondes.

Ce que vous recherchez est probablement le temps depuis l'époque, vous pouvez donc faire quelque chose comme

std::chrono::nanoseconds ns = std::chrono::high_resolution_clock::now().time_since_epoch();
unsigned long result = ns.count();

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