c++ - raw - Cómo obtener la marca de tiempo actual en milisegundos desde 1970, de la misma forma en que se hace Java
raw unix timestamp (5)
Esta respuesta es bastante similar a la de Oz.''s , Usando <chrono>
para C ++, no la tomé de Oz. aunque...
Recogí el fragmento original al final 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 un montón de 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.
#include <chrono>
#include <iostream>
int main() {
__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;
}
En Java, podemos usar System.currentTimeMillis()
para obtener la marca de tiempo actual en milisegundos desde el momento de la é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?
Incluye <ctime>
y usa la función de time
.
Si tiene acceso a las bibliotecas C ++ 11, consulte la biblioteca std::chrono
. Puede usarlo para obtener los milisegundos desde el Unix Epoch como este:
#include <chrono>
// ...
using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
system_clock::now().time_since_epoch()
);
Si usa gettimeofday, tiene que lanzar a long long, de lo contrario obtendrá desbordamientos y, por lo tanto, no el número real de milisegundos desde la época: long 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 ;-).
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;
}
use <sys/time.h>
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
referir this