You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 00:22:39