【问题标题】:How to get timestamp in microseconds in C++?如何在 C++ 中以微秒为单位获取时间戳?
【发布时间】:2015-06-29 05:35:35
【问题描述】:

我尝试了this 和我在网上找到的其他代码,但它们不起作用。我的 IDE 是 Xcode。 编辑:当我尝试链接上的代码时,变量 long long microseconds 总是返回 0。 我想以这种方式打印时间戳:(小时:分钟:微秒)。例如,15:17:09:134613464312。

【问题讨论】:

  • 现在效果如何?你有什么问题?什么错误,如果有的话?如果构建正确且没有警告,您期望得到什么结果以及得到什么?
  • “没用” - 当你尝试它们时发生了什么?您是否收到了编译器错误消息(如果有,又是什么)或可疑的运行时值?顺便说一句/-对于链接的解决方案,您需要一个支持 C++11 的编译器并启用 C++11 支持。对于“和其他代码”-您还应该描述它们吗?这里的人浪费时间为您提供您已经尝试过的相同答案有什么用?如果您展示您的尝试,他们可能会看到您的错误并提供一些有针对性的建议。

标签: c++ timestamp


【解决方案1】:

您使用的方法是正确的。

如果两次 now() 调用之间的代码持续时间少于一微秒,则微秒将始终为零,因为该数字不是浮点数。如果您始终为零,则意味着您需要更高的分辨率(尝试纳秒)。

顺便说一句,如果你只是想要时间戳,你不想使用这个代码,因为它是为了计算两个时间点之间的经过时间。你可以试试这样的:

auto microseconds = std::chrono::duration_cast<std::chrono::microseconds>
    (std::chrono::high_resolution_clock::now().time_since_epoch()).count();

这实际上是一个时间戳,而不是一个持续时间。

编辑:要计算当前的微秒数,您可以执行以下操作:

#include <iostream>
#include <chrono>
#include <ctime>

using namespace std;
using namespace std::chrono;

using days = duration<int, ratio_multiply<hours::period, ratio<24> >::type>;

int main() {
    system_clock::time_point now = system_clock::now();
    system_clock::duration tp = now.time_since_epoch();
    days d = duration_cast<days>(tp);
    tp -= d;
    hours h = duration_cast<hours>(tp);
    tp -= h;
    minutes m = duration_cast<minutes>(tp);
    tp -= m;
    seconds s = duration_cast<seconds>(tp);
    tp -= s;
    cout << tp.count() << "\n";
    return 0;
}

这将打印当前的微秒计数。

时:分:秒非常简单。

【讨论】:

  • 感谢您的快速回答。我想以这种方式显示它:(小时:分钟:微秒)。例如,15:17:09:134613464312。如果您也能告诉我该怎么做,我将不胜感激。很抱歉不准确。
  • 您想要时间戳还是当前时间?这不是一回事。如果要显示时间戳,则显示小时数没有意义,因为它超过 45 年。
  • 我很抱歉造成混乱。我想要示例中的精确当前时间。
猜你喜欢
  • 1970-01-01
  • 2020-04-11
  • 1970-01-01
  • 2012-01-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-11-18
相关资源
最近更新 更多