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