Em Java, podemos usar System.currentTimeMillis()
para obter o registro de data e hora atual em milissegundos desde a época da época, que é:
a diferença, medida em milissegundos, entre o horário atual e a meia-noite, 1 de janeiro de 1970, UTC.
Em C ++, como obter a mesma coisa?
Atualmente, estou usando isso para obter o carimbo de data / hora atual -
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;
Parece certo ou não?
steady_clock
sempre progredirá, é uma verdadeira medida do tempo desde sua época, enquantosystem_clock
pode ser uma representação do tempo lógico desde a época. A cada salto de segundo, os dois poderiam se separar, dependendo da implementação do sistema.system_clock
a mesma da época do UNIX, mas a especificação diz apenas que deve ser o relógio de parede em tempo real do sistema. Não há exigência para que asteady_clock
realidade corresponda, apenas que ela avance.timeval
estruturas é irritante).usar
<sys/time.h>
consulte isso .
fonte
Essa resposta é bem parecida com a de Oz , usando
<chrono>
C ++ - eu não a peguei de Oz. Apesar...Peguei o snippet original na parte inferior desta página e o modifiquei levemente para ser um aplicativo de console completo. Eu amo usar essa pequena coisa. É fantástico se você cria muitos scripts e precisa de uma ferramenta confiável no Windows para obter a época em milissegundos reais sem recorrer ao VB, ou a um código menos moderno e menos fácil de ler.
fonte
-560549313
isso não está certo, certo?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
. Eu swithced isso paraint64_t
e funciona! Muito obrigado por pedir mais informações para ajudar!unsigned long long
é mais portátil e__int64
está disponível apenas no MSVC.__int64
tipo no C ++ padrão. Pode-se usar em seustd::int64_t
lugar.Desde o C ++ 11, você pode usar
std::chrono
:std::chrono::system_clock::now()
.time_since_epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
para inteiro (uint64_t
para evitar transbordamento)fonte
unsigned long long
vez deuint64_t
.Se usar gettimeofday, você precisará converter para long long, caso contrário, obterá overflows e, portanto, não o número real de milissegundos desde a época: long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; fornecerá um número como 767990892, que é redondo 8 dias após a época ;-).
fonte
Inclua
<ctime>
e use atime
funçãofonte