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

学习

我是新手std::chrono,我正在寻找一种简单的方法来构造一个string包含格式为hhh:mm:ss的时间间隔(是的,三个小时的数字),以指示开始时间点与现在之间的时差。

我将如何使用steady_clock关于Cppreference示例不太适合这个问题。

霍华德·辛南特(Howard Hinnant)

每当您发现自己在<chrono>中的各个单元之间手动应用转换因子时,都应该问自己:

为什么要手动转换单位?这不是<chrono>应该为我做的事吗?

“转换因子”是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';
}

还有其他方法可以在不暴露转换因子的情况下进行操作,这种方法仅是示例。我的主要观点是:避免在代码中对单位转换因子进行硬编码。它们容易出错。即使您第一次进行编码时正确无误,转换因子也很容易受到将来代码维护的影响。您可以要求所有单位转换都在<chrono>库中进行,从而对代码进行将来的验证

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

检查包含列表中字符串的字符串的最简单方法?

获取字符串数字前缀的最简单方法

Java:获取字符串中最后一个单词的最简单方法

在Instaparse中以字符串形式获取错误消息的最简单方法?

在Julia中获取UTF-8子字符串的最简单方法是什么

在字符串中获取年份的最简单方法是什么?

获取随机数的最简单方法,它不在子字符串中?

从对象数组创建字符串的最简单方法

创建仅包含字符串的JList的最简单方法(必须在运行时更改Jlist)

重复字符串的简单方法

反转字符串的简单方法

生成n个重复字符的字符串的最简单方法是什么?

替换字符串中偶数位置的所有字符的最简单方法。

使用JS在字符串中找出字符重复的最简单方法是什么?

防止空字符终止我的字符串的最简单方法是什么?

在TypeScript数字上检查空字符串的最简单方法

在C ++中将int转换为字符串的最简单方法

摆脱C#字符串中零宽度空间的最简单方法

计算段落字符串中一个单词出现次数的最简单方法

验证给定字符串是否为有效FQDN名称的最简单方法?

创建可读的JSON字符串的最简单方法是什么?

将字符串转换为HashMap的最简单方法

将IntStream作为字符串输出的最简单方法

使用替换字典替换字符串的最简单方法?

在JavaScript中混淆和反混淆字符串的最简单方法

使用StringComparison.Ordinal对字符串进行排序的最简单方法

在.NET中在换行符上拆分字符串的最简单方法?

在bash字符串中插入新行的最简单方法

将字符串(例如“5:4”)转换为数值的最简单方法是什么