En Java, podemos usar System.currentTimeMillis()
para obtener la marca de tiempo actual en milisegundos desde el tiempo de época que es:
la diferencia, medida en milisegundos, entre la hora actual y la medianoche del 1 de enero de 1970 UTC.
En C ++, ¿cómo obtener lo mismo?
Actualmente estoy usando esto para obtener la marca de tiempo actual:
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;
Esto se ve bien o no?
steady_clock
siempre avanzará, es una verdadera medida del tiempo desde su época, mientras quesystem_clock
puede ser una representación del tiempo lógico desde la época. Por cada segundo intercalar, los dos podrían separarse más dependiendo de la implementación del sistema.system_clock
ser igual a la época de UNIX, pero la especificación solo dice que debe ser el reloj de pared en tiempo real de todo el sistema. No hay ningún requisito parasteady_clock
que coincida con la realidad, solo que solo avance.timeval
estructuras es molesto).utilizar
<sys/time.h>
referir esto .
fuente
Esta respuesta es bastante similar a la de Oz. , Usando
<chrono>
C ++: no la tomé de Oz. aunque...Recogí el fragmento original en la parte inferior de esta página y lo modifiqué ligeramente para que fuera una aplicación de consola completa. Me encanta usar esta pequeña cosa. Es fantástico si hace muchos scripts y necesita una herramienta confiable en Windows para obtener la época en milisegundos reales sin recurrir al uso de VB, o algún código menos moderno y menos amigable para el lector.
fuente
-560549313
esto no está bien, ¿verdad?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
. ¡Cambié esoint64_t
y funciona! ¡Muchas gracias por pedir más información para ayudar!unsigned long long
es más portátil y__int64
solo está disponible en MSVC.__int64
tipo en C ++ estándar. Uno puede usarstd::int64_t
en su lugar.Desde C ++ 11 puedes usar
std::chrono
:std::chrono::system_clock::now()
.time_since_epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
a entero (uint64_t
para evitar el desbordamiento)fuente
unsigned long long
lugar deuint64_t
.Si usa gettimeofday, tiene que emitir demasiado tiempo, de lo contrario obtendrá desbordamientos y, por lo tanto, no el número real de milisegundos desde la época: largo int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; le dará un número como 767990892 que es redondo 8 días después de la época ;-).
fuente
Incluir
<ctime>
y usar latime
función.fuente