时间持续时间到时间字符串
Chrono duration to time string
我有几行代码可以获取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 的日期库(基本上是相同的,除了这里和那里的一些位(可以更好地完成此操作,正如该人本人的评论中所述。有关它的概述,您可能对此答案感兴趣。
相关文章:
- 如何将时间字符串 (M:SS) 转换为浮点数
- 时间持续时间到时间字符串
- 格式化的时间字符串在解析为time_point时会产生小时差异
- 如何将毫秒的日期时间字符串转换为 UNIX 时间戳
- 将具有 DST 的时间字符串转换为 UTC 时间戳
- 使用提升解析日期时间字符串:采用个位数小时格式
- 使用 c++ 获取两个日期与时间字符串之间的差异(以秒为单位)
- 快速将带有时区的日期时间字符串转换为 UNIX 时间戳(C++)
- 时间字符串减去
- 如何在 Linux 中C++中将日期和时间字符串精确到毫秒?
- 使用 std::get_time: 错误的结果将时间字符串转换为 std::time_t
- 我如何解析包括分数时间的日期时间字符串
- 使用 spirit 将日期时间字符串解析为time_t值
- 如何让此函数返回日期时间字符串
- 如何将标准::时间::time_point转换为带有秒小数部分的日历日期时间字符串?
- 将系统时间 int 转换为格式化的时间字符串
- 从1601年1月1日起,将100纳秒间隔的uint64时间转换为日期时间字符串
- 使用C++将任何形式的日期-时间字符串格式更改为美国日期-时间格式
- localtime_s和strftime用法构建ISO时间字符串
- 在 C++ 中将日期和时间字符串转换为无符号__int64