В Java можно сделать это:
long now = (new Date()).getTime();
Как я могу сделать то же, но в C++?
В стандартном C ++ такого метода нет (в стандартном C ++ есть только вторая точность, а не миллисекунда). Вы можете сделать это непереносимыми способами, но, поскольку вы не указали, я предполагаю, что вам нужно портативное решение. Я бы сказал, что лучше всего использовать функцию ускорения microsec_clock :: local_time () .
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 ()
Мне нравится, когда функция с именем 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 года. Таким образом, если вы используете этот код, полагайтесь только на разницу между временами, а не на абсолютную само время.
Стандартный C ++ не имеет функции времени с точностью до секунды.
Однако почти каждая операционная система поддерживает. Поэтому вам нужно писать код, зависящий от ОС.
Win32:
GetSystemTime ()
GetSystemTimeAsFileTime ()
Unix / POSIX:
gettimeofday ()
clock_gettime ()
Потому что 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
.