gpt4 book ai didi

c++ - 获取包含时间间隔的字符串的最简单方法

转载 作者:塔克拉玛干 更新时间:2023-11-03 01:07:21 24 4
gpt4 key购买 nike

我是 std::chrono 的新手,我正在寻找一种构造 string 的简单方法,其中包含格式为 hhh:mm:ss (是的,3 小时的数字),表示开始时间点和现在之间的差异。

我如何使用 steady_clock 来解决这个问题? examples on Cppreference不太适合这个问题。

最佳答案

任何时候您发现自己使用 <chrono> 手动应用单位之间的转换因子图书馆,你应该问问自己:

Why am I converting units manually? Isn't this what <chrono> is supposed to do for me?!

“转换系数”是 60、1000、100 或其他任何值。如果您在代码中看到它,您就会面临转换因子错误。

这里是 sasha.sochka 的重写代码,没有使用这些转换因子。为了说明这种技术的通用性,为耀斑添加了毫秒数:

#include <chrono>
#include <string>
#include <sstream>
#include <iomanip>
#include <iostream>

int main() {
using namespace std::chrono;
steady_clock::time_point start;
steady_clock::time_point now = steady_clock::now();

auto d = now -start;
auto hhh = duration_cast<hours>(d);
d -= hhh;
auto mm = duration_cast<minutes>(d);
d -= mm;
auto ss = duration_cast<seconds>(d);
d -= ss;
auto ms = duration_cast<milliseconds>(d);

std::ostringstream stream;
stream << std::setfill('0') << std::setw(3) << hhh.count() << ':' <<
std::setfill('0') << std::setw(2) << mm.count() << ':' <<
std::setfill('0') << std::setw(2) << ss.count() << '.' <<
std::setfill('0') << std::setw(3) << ms.count();
std::string result = stream.str();
std::cout << result << '\n';
}

还有其他方法可以在不公开转换因素的情况下做到这一点,这种方法只是一个例子。我的主要观点是:避免在代码中硬编码单位转换因子。他们很容易出错。即使您在第一次编写代码时就把它弄对了,转换因子也很容易受到 future 代码维护的影响。您可以通过要求在 <chrono> 内进行所有单位转换来保证您的代码不会过时。图书馆。

关于c++ - 获取包含时间间隔的字符串的最简单方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17946124/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com