c++ - C++11 中的优雅时间打印

标签 c++ datetime c++11 time

这就是我想在 C++11 中做的事情:给定两个时间点(例如计时类)作为 std::chrono::steady_clock::now(),优雅地打印他们的时差,例如:

1 day 4 hours 3 minutes 45 seconds

32 minutes 54 seconds 345 milliseconds

请注意,我对简单地使用 put_time 不感兴趣,因为我想从最重要的时间单位 开始打印。我知道,这是一个只打印差异的解决方案,但它并不漂亮:我正​​在寻找一个优雅解决方案:)

干杯!

最佳答案

Duration可以做算术。

#include <chrono>
#include <iostream>
#include <thread>

int main(){
    using namespace std::chrono;
    using day_t = duration<long, std::ratio<3600 * 24>>;
    auto start = system_clock::now();
    std::this_thread::sleep_for(seconds(1));
    auto end = system_clock::now();
    auto dur = end - start;
    auto d = duration_cast<day_t>(dur);
    auto h = duration_cast<hours>(dur -= d);
    auto m = duration_cast<minutes>(dur -= h);
    auto s = duration_cast<seconds>(dur -= m);
    auto ms = duration_cast<seconds>(dur -= s);
    std::cout << d.count() << " days, "
        << h.count() << " hours, "
        << m.count() << " minutes, "
        << s.count() << " seconds, "
        << ms.count() << " milliseconds\n";

    return 0;
}

输出:

enter image description here

可能重复:Extract year/month/day etc. from std::chrono::time_point in C++

关于c++ - C++11 中的优雅时间打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063979/

相关文章:

python - 在 Python 中结合年、月和日来创建日期

c++ - 为什么在推导模板参数时应用 §5/5?规则不能不同吗?

c++ - 具有 0..n 参数的跨平台可变参数宏

c++ - 为什么在此代码中出现运行时错误SIGSEGV

java - java中日期时区格式的转换

c++ - 从 `map` 中删除不在 `set` 中的元素

c++ - CRTP 和多级继承

c++ - 为什么未初始化的 constexpr 变量不是常量?

c++ - 如何从 lldb 执行函数(由指针标识)

javascript - 如何将 24 小时添加到 javascript 的 datetime 对象