时间持续时间到时间字符串

Chrono duration to time string

本文关键字:时间 字符串 持续时间      更新时间:2023-10-16

我有几行代码可以获取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;

我想稍后将其反转,并将双精度转换为格式为 HH:MM:SS.ffffffff 格式为HH:MM:SS.ffffffff

我现在的第一步是获取双精度并将其作为参数传递给 chrono::d uration。

auto rep = std::chrono::duration<double>(origin_time);

我将如何使用时间库来实现上面指定的字符串,谢谢!

构造一个包含当前纪元的新time_point

auto epoch = std::chrono::time_point<std::chrono::system_clock>();

将转换后的持续时间添加到此time_point

auto oldNow = epoch + std::chrono::duration_cast<std::chrono::milliseconds>(std::chrono::duration<double>(origin_time));

将其转换为std::time_t

auto t_c = std::chrono::system_clock::to_time_t(oldNow);

使用格式化工具打印它time_t

std::cout << std::put_time(std::localtime(&t_c), "%F %T");

示例输出:

2020-01-10 18:45:48

现场观看!

您会注意到它缺少.ffffff部分。那是因为std::put_time没有格式化选项。您可以自己轻松计算值并将其放在字符串的末尾,如果这对您很重要。

另请注意,使用 C++20chrono或 Howard 的日期库(基本上是相同的,除了这里和那里的一些位(可以更好地完成此操作,正如该人本人的评论中所述。有关它的概述,您可能对此答案感兴趣。