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

如何用fmt库格式化std::chrono::duration为无小数的HH:MM:SS格式

格式化std::chrono::duration为HH:MM:SS整数秒格式

我尝试将std::chrono::duration对象格式化为HH:MM:SS格式(例如16:42:02,其中16为小时、42为分钟、2为秒)。用fmt库的格式化说明符写了如下代码:

using namespace std::chrono;

auto start = high_resolution_clock::now();
auto end = start + 4s;
fmt::print("{:%H:%M:%S} \n", end);

但输出的秒数带有小数:

16:58:55.359425076 

我想把秒数四舍五入为整数,试了几种精度写法都不对:

fmt::print("{:.2%H:%M:%S} \n", end);  // 报错
fmt::print("{:.2f%H:%M:%S} \n", end);  // 报错 
fmt::print("{:%H:%M:.2%S} \n", end);  // 输出无意义内容:17:07:.202.454873454 

解决方案

要实现秒数四舍五入为整数的HH:MM:SS格式,有两种可行方式:

方式一:直接指定精度说明符

fmt库中,chrono格式化的精度需要放在格式说明符的最前端,作用于整个时间点的秒部分。如果要保留整数秒,使用.0精度即可:

fmt::print("{:.0%H:%M:%S} \n", end);

也可以用等价的%T格式说明符(%T对应%H:%M:%S):

fmt::print("{:.0%T} \n", end);

这样会自动将秒数四舍五入为整数,输出类似16:58:55的结果。

方式二:转换为整秒时间点

先将时间点转换为std::chrono::seconds类型,再进行格式化,这样得到的秒数天然是整数:

auto end_sec = time_point_cast<seconds>(end);
fmt::print("{:%H:%M:%S} \n", end_sec);

内容的提问来源于stack exchange,提问作者Michael A

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 20:02:07