我正在尝试将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
型
我想把它舍入到最接近的整数,但不知道在哪里放置精度说明符(精度2只是测试方式):
fmt::print("{:.2%H:%M:%S} \n", end); // error
fmt::print("{:.2f%H:%M:%S} \n", end); // error
fmt::print("{:%H:%M:.2%S} \n", end); // nonsense: 17:07:.202.454873454
型
我有点迷失在盯着时间的格式规格的细节.
上面的编译器资源管理器示例是here。
2条答案
按热度按时间rjzwgtxy1#
要四舍五入到最接近的秒,请使用
round<seconds>(tp)
将时间点转换为秒精度。此外,high_resolution_clock
与日历没有可移植关系。您需要使用system_clock
。对于gcc,high_resolution_clock
是system_clock
的类型别名,因此它意外地工作。但这将无法使用MSVC或LLVM工具编译。字符串
Demo.
如果你想要其他舍入模式,你也可以使用
floor
或ceil
。y3bcpkx12#
我不知道这转换成
<fmt>
的效果如何,但对于标准C++<format>
,你可能会使用%OS
说明符获得整秒作为你的区域设置的 * 替代表示 *。或者我们可以使用区域设置的整个时间表示,使用
%X
或%EX
。当然,这在我的Debian系统上是有效的(注意我们将"C"区域设置传递给
format()
):字符串
生产(例如):
型