Obtenga la hora actual en milisegundos, o formato HH: MM: SS: MMM

He escrito una función de c ++ para obtener la hora actual en formato HH:MM:SS . ¿Cómo puedo agregar milisegundos o nanosegundos para tener un formato como HH:MM:SS:MMM ? Si no es posible, una función que devuelva la hora actual en ms también sería buena. Entonces puedo calcular las distancias de tiempo relativas entre dos puntos de registro.

 string get_time() { time_t t = time(0); // get time now struct tm * now = localtime(&t); std::stringstream sstm; sstm <tm_hour) << ':' <tm_min) << ':' <tm_sec; string s = sstm.str(); return s; } 

En lugar de usar time() (segundos desde la época), intente gettimeofday() . Te da una estructura que incluye un campo de microsegundos.

Este es un método portátil que utiliza la biblioteca crono C++11 :

 std::string time_in_HH_MM_SS_MMM() { using namespace std::chrono; // get current time auto now = system_clock::now(); // get number of milliseconds for the current second // (remainder after division into seconds) auto ms = duration_cast(now.time_since_epoch()) % 1000; // convert to std::time_t in order to convert to std::tm (broken time) auto timer = system_clock::to_time_t(now); // convert to broken time std::tm bt = *std::localtime(&timer); std::ostringstream oss; oss << std::put_time(&bt, "%H:%M:%S"); // HH:MM:SS oss << '.' << std::setfill('0') << std::setw(3) << ms.count(); return oss.str(); }