- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有自 Epoch 以来的纳秒数,我想将其打印为可读。
我在网上找到的例子time_point
正在使用 system_clock
然后转换为 std::time_t
.但是,我正在使用 high_resolution_clock
(由于纳秒),因此很难理解我如何打印它。
鉴于我正在处理纳秒,最好的技术是什么?如果可能的话,我更愿意坚持使用标准库。
我现在坚持使用 C++17,但请务必提及 C++20 是否使这更容易做到。
#include <chrono>
#include <iostream>
using Clock = std::chrono::high_resolution_clock;
using TimePoint = std::chrono::time_point<Clock>;
int main()
{
const uint64_t nanosSinceEpoch = 1517812763001883383;
const Clock::duration duration_ns_since_epoch = std::chrono::nanoseconds(nanosSinceEpoch);
const TimePoint tp(duration_ns_since_epoch);
// Would like to print tp in readable format
}
最佳答案
high_resolution_clock
没有可移植的时代。可能是 1970 年。它可能是您的设备启动时。因此,在打印其 time_point
时,最好的办法是打印基础持续时间。system_clock
可以代表nanoseconds
即使 system_clock::time_point
才不是。诀窍是使用更通用的形式 time_point
即:
template <class Clock, class Duration>
class time_point;
您可以指定时钟和持续时间,例如:
time_point<system_clock, nanoseconds> tp;
我喜欢设置一个模板化的类型别名来做到这一点:
template <class Duration>
using sys_time = std::chrono::time_point<std::chrono::system_clock, Duration>;
现在我可以使用这个更简单的语法:
sys_time<nanoseconds> tp;
在 C++20 中,
sys_time
由
<chrono>
为您提供.而 C++20 允许你简单地打印出
system_clock
基于
time_point
s。
<chrono>
适用于 C++11/14/17:
#include "date/date.h"
#include <chrono>
#include <iostream>
int main()
{
const uint64_t nanosSinceEpoch = 1517812763001883383;
const std::chrono::nanoseconds d(nanosSinceEpoch);
using date::operator<<;
std::cout << date::sys_time<std::chrono::nanoseconds>{d} << '\n';
}
输出:
2018-02-05 06:39:23.001883383
更新以解决时区问题
<chrono>
preview library在处理时区的标题 tz.h 中的同一链接中。这个库不是只有头文件。有一个与之关联的源文件 tz.cpp。
Here are directions for compiling it.
sys_time
(又名
Unix Time/UTC)到任何
IANA time zone .
#include "date/tz.h"
#include <chrono>
#include <iostream>
int main()
{
const uint64_t nanosSinceEpoch = 1517812763001883383;
using namespace std::chrono;
date::sys_time<nanoseconds> tp{nanoseconds(nanosSinceEpoch)};
std::cout << date::zoned_time{"America/Chicago", tp} << '\n';
}
输出:
2018-02-05 00:39:23.001883383 CST
这也是 C++20
<chrono>
的一部分.
zoned_time
是时区和
sys_time
的配对, 任何精度,只要它是秒或更细。它的流操作符包括时区缩写。还有一个
format
可用于自定义输出的函数(C++20 中的
std::format
,库中的
date::format
)。例如:
date::zoned_time zt{"America/Chicago", tp};
std::cout << date::format("%F %T%z", zt) << '\n';
输出:
2018-02-05 00:39:23.001883383-0600
关于C++ 打印 chrono::time_point<chrono::high_resolution_clock> 可读,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62954221/
我目前正在尝试计算 cpp 中循环的增量时间。目前我使用这段代码 #include int main() { typedef std::chrono::high_resolution_clock C
我从事的工作涉及基准测试算法。我读到了新的 C++11 中的 header ,所以我选择了它。 我可以进行测量和一切,但我在努力解决问题。 当做类似的事情时 auto duration = chro
我在Windows 10上使用g++版本8.1.0,但仍在尝试编译时 auto start=high_resolution_clock::now(); rd(n); auto stop=high_re
我希望能够用我的时钟类测量耗时(对于帧时间)。 (问题在代码下面描述。) 时钟.h typedef std::chrono::high_resolution_clock::time_point tim
所以我有一个程序以两种不同的方式计算多项式:Honrer 方法和 Naive 方法。我试图分别查看它们的运行时间,但根据我放置函数调用的顺序,它们的时间会发生变化。例如,我先放置 Horner 方法,
我正在开发一个类 Timer它的一些成员属于 high_resolution_clock::time_point 类型其中 time_point定义为 typedef chrono::time_poi
C++11 定义了high_resolution_clock,它的成员类型有period 和rep。但我不知道如何获得那个时钟的精确度。 或者,如果我可能无法达到精确度,我是否可以以某种方式至少获得滴
我正在尝试实现类似 MIDI 的时钟采样播放器。 有一个计时器,它增加脉冲计数器,每 480 个脉冲是一个四分之一,所以脉冲周期为 1041667 纳秒,每分钟 120 次。计时器不是基于 sleep
我正在学习 ,但我不明白一件事。 #include #include int main() { auto t1 = std::chrono::high_resolution_clock::
这个问题在这里已经有了答案: What are the uses of std::chrono::high_resolution_clock? (2 个答案) 关闭 5 年前。 所以我尝试使用 st
起初我认为它可以用于性能测量。但它是said std::chrono::high_resolution_clock 可能不稳定(is_steady 可能是 false)。也有人说 std::chron
让我通过这个测试程序问我的问题: #include #include using std::chrono::nanoseconds; using std::chrono::duration_cas
多年来,我一直在为帧计时器使用以下时钟定义: using frame_clock = std::conditional_t; 换句话说,我想要使用尽可能高的分辨率定义的时钟,但它必须单调递增。
我正在使用 boost::chrono::high_resolution_clock::now();有时得到: Boost::Chrono - Internal Error. 我的应用程序是多线程的,
我使用的是 visual studio 2012,想知道 high_resolution_clock 的准确性。 基本上我正在编写一些代码来显示声音和图像,但我需要它们非常同步,并且图像必须无撕裂。我
20.12.7.3 的 C++ 草案内容如下: high_resolution_clock may be a synonym for system_clock or steady_clock 当然这可
我一直在研究各种游戏计时循环方法,例如格伦·菲德勒和德维特。由于我自己的 C++ 知识有限,我发现关键区域很难理解。有了这个,我开始尝试实现我自己的方法……我想出了一个很好的方法来尝试理解这些方法。
我想分析我的 C++ 程序,并使用了 high_resolution_clock为了这个目的。作为示例提供了该问题的示例代码。我尝试了三种不同的方法。 示例 1 #include #include
我有以下代码可以正常工作: auto my_time = std::chrono::system_clock::now(); std::cout << "My Time is " << std::
我有自 Epoch 以来的纳秒数,我想将其打印为可读。 我在网上找到的例子time_point正在使用 system_clock然后转换为 std::time_t .但是,我正在使用 high_res
我是一名优秀的程序员,十分优秀!