C++20中如何简洁将std::chrono::microseconds转为%H%M%S格式输出?
C++20中格式化午夜后微秒时长为%H:%M:%S的最简方案
我持有一个std::chrono::microseconds类型的时长,它代表距离上次午夜已过的微秒数,希望在C++20中用最简洁的方式将其格式化为%H:%M:%S格式输出。之前看到的实现较为繁琐,例如这段代码:
void print_time(std::chrono::microseconds duration) { // Convert microseconds to seconds auto duration_in_seconds = std::chrono::duration_cast<std::chrono::seconds>(duration); // Extract hours, minutes, and seconds auto hours = std::chrono::duration_cast<std::chrono::hours>(duration_in_seconds); duration_in_seconds -= hours; auto minutes = std::chrono::duration_cast<std::chrono::minutes>(duration_in_seconds); duration_in_seconds -= minutes; auto seconds = duration_in_seconds; // Print the result std::cout << std::setw(2) << std::setfill('0') << hours.count() << ":" << std::setw(2) << std::setfill('0') << minutes.count() << ":" << std::setw(2) << std::setfill('0') << seconds.count() << std::endl; }
在C++20中,利用<chrono>库的std::chrono::hh_mm_ss和<format>库的std::format可以大幅简化代码,无需手动拆分时分秒和处理补零:
#include <chrono> #include <format> #include <iostream> void print_time(std::chrono::microseconds duration) { auto time_parts = std::chrono::hh_mm_ss{duration}; std::cout << std::format("{:%H:%M:%S}", time_parts) << '\n'; }
说明
std::chrono::hh_mm_ss会自动将输入时长拆分为小时、分钟、秒等时间分量,无需手动计算和扣除;std::format原生支持chrono类型的格式化,%H/%M/%S会自动以两位数字输出并补零,完全符合%H:%M:%S格式要求;- 如果需要保留微秒精度,可将格式字符串改为
"{:%H:%M:%S.%f}"。
内容的提问来源于stack exchange,提问作者glades
相关产品推荐
相关产品推荐

