【问题标题】:Timestamp in milliseconds gives me 10 digit in C++?以毫秒为单位的时间戳在 C++ 中给了我 10 位数字?
【发布时间】:2013-10-25 11:13:45
【问题描述】:

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

【问题讨论】:

  • 如果你有 1234 的值,你是否希望它被打印为例如0000001234?除非要求,否则从不打印前导零。
  • 我明白了。所以我在代码中得到的这个时间戳(以毫秒为单位)将是自纪元以来的毫秒数?
  • 该值17227676 是一个持续时间,而不是时间戳。只有大约 4 小时 47 分钟。
  • hmmm.. 那我的 C++ 代码做错了吗?

标签: c++ date boost time milliseconds


【解决方案1】:

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

获取当天的时间偏移量。

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

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

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


如果您查看tm 结构,您会看到它包含年数(从 1900 年开始,因此在此处减去 70)、天数,然后是小时、分钟和秒数。所有这些都可以用来轻松计算时间以秒为单位

几秒就是这里的问题。如果你看例如你看到的 POSIX time 函数

应返回自纪元以来的时间值,以秒为单位

如果您想要精确的毫秒分辨率,您根本不能使用ptime(其中p 代表POSIX)。如果你想要毫秒分辨率,你要么必须使用例如以更高分辨率返回时间的系统函数(如gettimeofday),或者您可以查看例如this old SO answer.

【讨论】:

  • 感谢您的建议..您能否提供一个示例,说明如何使用 struct tm 以毫秒为单位构建我的时间。我最近开始使用 C++,所以发现它有点困难..谢谢..
  • @SSH 更新了我的答案,其中(除其他外)一个指向似乎正是您想要的答案的链接。
猜你喜欢
  • 2023-03-11
  • 1970-01-01
  • 2015-06-17
  • 2011-08-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-28
  • 1970-01-01
相关资源
最近更新 更多