Как получить время в миллисекундах в C++

В Java можно сделать это:

long now = (new Date()).getTime();

Как я могу сделать то же, но в C++?

7
задан Pharap 22 April 2019 в 09:32
поделиться

5 ответов

В стандартном C ++ такого метода нет (в стандартном C ++ есть только вторая точность, а не миллисекунда). Вы можете сделать это непереносимыми способами, но, поскольку вы не указали, я предполагаю, что вам нужно портативное решение. Я бы сказал, что лучше всего использовать функцию ускорения microsec_clock :: local_time () .

9
ответ дан 6 December 2019 в 05:48
поделиться

Boost имеет полезную библиотеку для этого:

http://www.boost.org/doc/libs/1_43_0/doc/html/date_time.html

ptime microsec_clock :: local_time () или ptime second_clock :: local_time ()

0
ответ дан 6 December 2019 в 05:48
поделиться

Мне нравится, когда функция с именем time_ms определяется как таковая:

// Used to measure intervals and absolute times
typedef int64_t msec_t;

// Get current time in milliseconds from the Epoch (Unix)
// or the time the system started (Windows).
msec_t time_ms(void);

Реализация, представленная ниже, должна работать в Windows, а также в Unix-подобных системах.

#if defined(__WIN32__)

#include <windows.h>

msec_t time_ms(void)
{
    return timeGetTime();
}

#else

#include <sys/time.h>

msec_t time_ms(void)
{
    struct timeval tv;
    gettimeofday(&tv, NULL);
    return (msec_t)tv.tv_sec * 1000 + tv.tv_usec / 1000;
}

#endif

Обратите внимание, что время, возвращаемое ветвью Windows, составляет миллисекунды с момента запуска системы, в то время как время, возвращаемое ветвью Unix, составляет миллисекунды с 1970 года. Таким образом, если вы используете этот код, полагайтесь только на разницу между временами, а не на абсолютную само время.

5
ответ дан 6 December 2019 в 05:48
поделиться

Стандартный C ++ не имеет функции времени с точностью до секунды.

Однако почти каждая операционная система поддерживает. Поэтому вам нужно писать код, зависящий от ОС.

Win32:
GetSystemTime ()
GetSystemTimeAsFileTime ()

Unix / POSIX:
gettimeofday ()
clock_gettime ()

3
ответ дан 6 December 2019 в 05:48
поделиться

Потому что C ++ 0x великолепен

namespace sc = std::chrono;

auto time = sc::system_clock::now(); // get the current time

auto since_epoch = time.time_since_epoch(); // get the duration since epoch

// I don't know what system_clock returns
// I think it's uint64_t nanoseconds since epoch
// Either way this duration_cast will do the right thing
auto millis = sc::duration_cast<sc::milliseconds>(since_epoch);

long now = millis.count(); // just like java (new Date()).getTime();

Это работает с gcc 4.4+. Скомпилируйте его с помощью - std = c ++ 0x . Я не знаю, реализует ли VS2010 std :: chrono .

12
ответ дан 6 December 2019 в 05:48
поделиться
Другие вопросы по тегам:

Похожие вопросы: