Получить текущее время в миллисекундах с использованием С++ и Boost
В моем потоке (используя boost:: thread) мне нужно получить текущее время в мс или меньше и преобразовать в ms:
Собственно, здесь я нашел это:
tick = boost::posix_time::second_clock::local_time();
now = boost::posix_time::second_clock::local_time();
И, похоже, работает, но после того, как мне нужно иметь длинное значение миллисекунд теперь...
Как я могу это сделать?
Ответы
Ответ 1
Вы можете использовать boost::posix_time::time_duration
, чтобы получить временной диапазон. Например, например,
boost::posix_time::time_duration diff = tick - now;
diff.total_milliseconds();
И чтобы получить более высокое разрешение, вы можете изменить часы, которые используете. Например, для boost::posix_time::microsec_clock
, хотя это зависит от ОС. В Windows, например, boost::posix_time::microsecond_clock
имеет разрешение milisecond, а не микросекунду.
Пример, который немного зависит от аппаратного обеспечения.
int main(int argc, char* argv[])
{
boost::posix_time::ptime t1 = boost::posix_time::second_clock::local_time();
boost::this_thread::sleep(boost::posix_time::millisec(500));
boost::posix_time::ptime t2 = boost::posix_time::second_clock::local_time();
boost::posix_time::time_duration diff = t2 - t1;
std::cout << diff.total_milliseconds() << std::endl;
boost::posix_time::ptime mst1 = boost::posix_time::microsec_clock::local_time();
boost::this_thread::sleep(boost::posix_time::millisec(500));
boost::posix_time::ptime mst2 = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration msdiff = mst2 - mst1;
std::cout << msdiff.total_milliseconds() << std::endl;
return 0;
}
На моей машине win7. Первый выход - 0 или 1000. Второе разрешение.
Второй из них почти всегда 500, из-за более высокого разрешения часов. Я надеюсь, что немного помогу.
Ответ 2
Если вы имеете в виду миллисекунды с эпохи, вы можете сделать
ptime time_t_epoch(date(1970,1,1));
ptime now = microsec_clock::local_time();
time_duration diff = now - time_t_epoch;
x = diff.total_milliseconds();
Однако, это не особенно ясно, что вы после.
Взгляните на пример в документации для DateTime на Время увеличения времени
Ответ 3
// Get current date/time in milliseconds.
#include "boost/date_time/posix_time/posix_time.hpp"
namespace pt = boost::posix_time;
int main()
{
pt::ptime current_date_microseconds = pt::microsec_clock::local_time();
long milliseconds = current_date_microseconds.time_of_day().total_milliseconds();
pt::time_duration current_time_milliseconds = pt::milliseconds(milliseconds);
pt::ptime current_date_milliseconds(current_date_microseconds.date(),
current_time_milliseconds);
std::cout << "Microseconds: " << current_date_microseconds
<< " Milliseconds: " << current_date_milliseconds << std::endl;
// Microseconds: 2013-Jul-12 13:37:51.699548 Milliseconds: 2013-Jul-12 13:37:51.699000
}
Ответ 4
Попробуйте следующее: импортировать заголовки, как указано ниже, дает только секунды и миллисекунды. Если вам нужно объяснить код, прочитайте эту ссылку.
#include <windows.h>
#include <stdio.h>
void main()
{
SYSTEMTIME st;
SYSTEMTIME lt;
GetSystemTime(&st);
// GetLocalTime(<);
printf("The system time is: %02d:%03d\n", st.wSecond, st.wMilliseconds);
// printf("The local time is: %02d:%03d\n", lt.wSecond, lt.wMilliseconds);
}