【发布时间】:2020-01-10 18:06:06
【问题描述】:
我有几行代码可以获取我的 Windows 机器上的系统时钟并将其转换为双精度。
std::chrono::time_point<std::chrono::system_clock> currentNow =
std::chrono::system_clock::now();
auto duration = currentNow.time_since_epoch();
double millis = static_cast<double>(std::chrono::duration_cast<std::chrono::milliseconds>(duration).count());
double origin_time = millis / 1000;
我想稍后将其反转并将双精度转换为格式为 YYYY-mm-dd HH:MM:SS.ffffffff
的字符串我现在要做的第一步是获取双精度并将其作为参数传递给 chrono::duration。
auto rep = std::chrono::duration<double>(origin_time);
我将如何使用 chrono 库来实现上面指定的字符串,谢谢!
【问题讨论】:
-
chrono几乎完全与计时有关。要将chrono时间格式化为字符串,你注定要放弃chrono 并使用旧的C 时间格式化例程或编写类似于date的东西。这在 C++20 中得到解决,几乎是通过将date同化到集体中来解决的。 -
date.h 是
chrono解决方案。它也是与 C++11/14/17 一起使用的(当前草稿)C++20<chrono>的预览。 C++11<chrono>没有任何内置的格式化功能。在 C++20 中,它只是cout << system_clock::now()。 -
很难在没有看到您的代码的情况下判断。但我的第一个猜测是您将
double转换为days而不是seconds。您是否必须首先转换为double?如果不转义<chrono>类型系统,就不会发生这种错误。 -
太棒了!现在您知道如何使用 date.h 了! :-) 你也可以用
system_clock::time_point{}替换sys_days{January/1/1970}。唯一的区别是可读性,选择你最喜欢的。它们都表示“系统时钟时代”。它们都是编译时常量。