以毫秒为单位的时间戳在C ++中给出了10位数字?

时间:2013-10-17 05:03:54

标签: c++ date boost time milliseconds

我正在尝试使用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

1 个答案:

答案 0 :(得分:1)

此处的问题是您使用time_of_day()返回(来自this reference

  

获取当天的时间偏移量。

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

相反,你可能想要使用例如to_tm()获得struct tm并从那里以毫秒为单位构建时间。

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


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

以秒为单位是问题所在。如果你看一下,例如您看到的POSIX time功能

  

将返回自Epoch

以来以秒为单位的时间值

如果您想要精确的毫秒级分辨率,则无法使用ptimep代表POSIX)。如果你想要毫秒级的分辨率,你必须使用例如以更高分辨率返回时间的系统函数(如gettimeofday),或者您可以看到this old SO answer