这就是我想在 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;
}
输出:
可能重复:Extract year/month/day etc. from std::chrono::time_point in C++
关于c++ - C++11 中的优雅时间打印,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22063979/