0

我正在尝试使用 boost 库以毫秒为单位检索当前时间。下面是我用来获取当前时间(以毫秒为单位)的代码。

boost::posix_time::ptime time = boost::posix_time::microsec_clock::local_time();
boost::posix_time::time_duration duration( time.time_of_day() );
std::cout << duration.total_milliseconds() << std::endl;

uint64_t timestampInMilliseconds = duration.total_milliseconds() // will this work or not?

std::cout << timestampInMilliseconds << std::endl;

但这以 10 位打印出来,就像17227676..我在我的 ubuntu 机器上运行我的代码..而且我相信它总是 13 位长值?不是吗?

在以毫秒为单位计算时间戳后,我需要使用以下公式 -

int end = (timestampInMilliseconds / (60 * 60 * 1000 * 24))  % 14

但不知何故,我不确定我得到的 timestampInMilliseconds 是否正确?

首先我应该使用 boost::posix 还是不使用?我假设可能有更好的方法..我在我的 ubuntu 机器上运行代码..

更新:-

由于这段 bash 脚本打印出 13 位的 timestampInMilliseconds ..

date +%s%N | cut -b1-13
4

1 回答 1

1

这里的问题是您使用time_of_day()which 返回(来自此参考

获取当天的时间偏移量。

因此,根据您在问题中提供的值,我可以推断您在凌晨 4:47 运行了这个程序。

相反,您可能想使用例如to_tm()来获取 astruct tm并从那里构建您的时间(以毫秒为单位)。

另请注意,命令(和函数)的%s格式是自纪元以来的秒数,而不是毫秒数。datestrftime


如果你看一下这个tm结构,你会看到它有年数(从 1900 年开始,所以在这里减去 70),一年中的天数,然后是一天中的小时、分钟和秒。所有这些都可以用来轻松计算以秒为单位的时间。

几秒钟之内就是这里的问题。如果您查看例如 POSIXtime函数,您会看到

应返回自 Epoch 以来的时间值(以秒为单位)

如果你想要一个精确的毫秒分辨率,你根本不能使用ptimep代表 POSIX)。如果您想要毫秒分辨率,您要么必须使用例如以更高分辨率(如gettimeofday)返回时间的系统函数,或者您可以看到例如这个旧的 SO 答案

于 2013-10-17T05:34:12.420 回答