В Java мы можем использовать System.currentTimeMillis()
текущую временную метку в миллисекундах с того времени, которое
разница, измеренная в миллисекундах, между текущим временем и полуночью 1 января 1970 года по Гринвичу.
В С ++ как получить то же самое?
В настоящее время я использую это, чтобы получить текущую метку времени -
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;
Это выглядит правильно или нет?
steady_clock
всегда будет двигаться вперед, это истинная мера времени с его эпохи, в то время какsystem_clock
может быть представление логического времени с эпохи. За каждую секунду прыжка эти две части могут расти дальше друг от друга в зависимости от реализации системы.system_clock
, чтобы быть таким же, как эпоха UNIX, но спецификация только говорит, что это должны быть общесистемные настенные часы реального времени. Там нет требования,steady_clock
чтобы соответствовать реальности, только чтобы он только двигаться вперед.timeval
структур раздражает).использование
<sys/time.h>
передайте это .
источник
Ответ на этот вопрос очень похож на Оз. По , используя
<chrono>
для C ++ - я не взял его из страны Оз. хотя...Я взял исходный фрагмент внизу этой страницы и немного изменил его, сделав его полноценным консольным приложением. Я люблю использовать эту маленькую штуку. Это замечательно, если вы много пишете сценарии и нуждаетесь в надежном инструменте в Windows, чтобы получить эпоху за реальные миллисекунды, не прибегая к использованию VB или какого-либо менее современного, менее удобного для чтения кода.
источник
-560549313
это неправильно, правда?int
!int nowms = std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::system_clock::now().time_since_epoch()).count();
, Я переключил его,int64_t
и он работает! Большое спасибо за дополнительную информацию, чтобы помочь!unsigned long long
более портативен и__int64
доступен только на MSVC.__int64
в стандартном C ++ типа нет .std::int64_t
Вместо этого можно использовать .Начиная с C ++ 11 вы можете использовать
std::chrono
:std::chrono::system_clock::now()
.time_since_epoch()
duration_cast<milliseconds>(d)
std::chrono::milliseconds
в целое число (uint64_t
чтобы избежать переполнения)источник
unsigned long long
вместоuint64_t
.unsigned long long
вместоuint64_t
? Я от природы предпочитаю печатать более коротким шрифтомЕсли вы используете gettimeofday, вам нужно использовать long long, иначе вы получите переполнение и, следовательно, не реальное количество миллисекунд с эпохи: long int msint = tp.tv_sec * 1000 + tp.tv_usec / 1000; даст вам число вроде 767990892, которое округляется через 8 дней после эпохи ;-).
источник
Включите
<ctime>
и используйтеtime
функцию.источник