Как получить текущую временную метку в миллисекундах с 1970 года именно так, как Java получает
В Java мы можем использовать System.currentTimeMillis()
, чтобы получить текущую временную метку в миллисекундах с момента времени, которая равна -
разница, измеренная в миллисекундах, между текущим временем и полночь, 1 января 1970 г. UTC.
В С++ как получить одно и то же?
В настоящее время я использую это, чтобы получить текущую временную метку -
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;
Это выглядит правильно или нет?
Ответы
Ответ 1
Если у вас есть доступ к библиотекам С++ 11, ознакомьтесь с библиотекой std::chrono
. Вы можете использовать его для получения миллисекунд с момента Unix Epoch:
#include <chrono>
// ...
using namespace std::chrono;
milliseconds ms = duration_cast< milliseconds >(
system_clock::now().time_since_epoch()
);
Ответ 2
использовать <sys/time.h>
struct timeval tp;
gettimeofday(&tp, NULL);
long int ms = tp.tv_sec * 1000 + tp.tv_usec / 1000;
обратитесь к этому.
Ответ 3
Если вы используете gettimeofday, вам нужно отбрасывать дольше, иначе вы получите переполнение и, следовательно, не реальное число миллисекунд с эпохи: long int msint = tp.tv_sec * 1000 + tp.tv_usec/1000;
даст вам число, подобное 767990892, которое равно 8 дням после эпохи; -).
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;
}
Ответ 4
Этот ответ очень похож на Oz. Использует <chrono>
для C++ - я не получил его от Oz. хоть...
Я взял оригинальный фрагмент в нижней части этой страницы и немного изменил его, чтобы он стал полноценным консольным приложением. Я люблю использовать эту маленькую вещь. Это замечательно, если вы делаете много сценариев и нуждаетесь в надежном инструменте в Windows, чтобы получить эпоху за миллисекунды, не прибегая к использованию VB или некоторого менее современного, менее удобного для чтения кода.
#include <chrono>
#include <iostream>
int main() {
unsigned __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;
}
Ответ 5
Начиная с С++ 11 вы можете использовать std::chrono
:
- получить текущее системное время:
std::chrono::system_clock::now()
- получить время с эпохи:
.time_since_epoch()
- перевести базовую единицу в миллисекунды:
duration_cast<milliseconds>(d)
- переведите
std::chrono::milliseconds
в целое число (uint64_t
чтобы избежать переполнения)
#include <chrono>
#include <cstdint>
#include <iostream>
uint64_t timeSinceEpochMillisec() {
using namespace std::chrono;
return duration_cast<milliseconds>(system_clock::now().time_since_epoch()).count();
}
int main() {
std::cout << timeSinceEpochMillisec() << std::endl;
return 0;
}
Ответ 6
Включите <ctime>
и используйте функцию time
.