在我的线程中(使用boost :: thread)我需要以ms或更少的时间检索当前时间并转换为ms:
实际上,在这里读到我发现了这个:
tick = boost::posix_time::second_clock::local_time();
now = boost::posix_time::second_clock::local_time();
似乎有效,但在我需要一个很长的毫秒时间后才能使用......
我该怎么做?
答案 0 :(得分:67)
您可以使用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
具有毫秒分辨率,而不是微秒。
一个稍微依赖硬件的例子。
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,因为时钟的分辨率更高。我希望有所帮助。
答案 1 :(得分:13)
如果您的意思是“epoch 以来>>毫秒
,那么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文档中的示例答案 2 :(得分:8)
// 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
}
答案 3 :(得分:-8)
试试这个:如上所述导入标题..仅给出秒和毫秒。如果您需要解释代码this link。
#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);
}