C++数据格式化3 - 格式化时间区间(使用时长)
1. 关键词
关键字:
C++ 数据格式化 字符串处理 std::string 时间区间 跨平台
应用场景:
想对一个时间区间(如用时:2000s)进行格式化,转化成人类易读的时分秒的格式。
2. strfmt.h
#pragma once #include <string> #include <cstdint> #include <sstream> #include <iomanip> #include "timeutil.h" namespace cutl { /** * @brief Format a time duration to a human-readable string. * * @param seconds the duration in seconds. * @return std::string the formatted string. */ std::string fmt_timeduration_s(uint64_t seconds); /** * @brief Format a time duration to a human-readable string. * * @param microseconds the duration in microseconds. * @return std::string the formatted string. */ std::string fmt_timeduration_ms(uint64_t microseconds); /** * @brief Format a time duration to a human-readable string. * * @param nanoseconds the duration in nanoseconds. * @return std::string the formatted string. */ std::string fmt_timeduration_us(uint64_t nanoseconds); } // namespace cutl
3. strfmt.cpp
#include <sstream> #include <iomanip> #include <bitset> #include "strfmt.h" namespace cutl { std::string fmt_timeduration_s(uint64_t seconds) { std::string text; if (seconds > ONE_DAY) { uint64_t day = seconds / ONE_DAY; text += std::to_string(day) + "d:"; } if (seconds > ONE_HOUR) { uint64_t hour = (seconds % ONE_DAY) / ONE_HOUR; text += fmt_uint(hour, 2) + "h:"; } if (seconds > ONE_MIN) { uint64_t min = (seconds % ONE_HOUR) / ONE_MIN; text += fmt_uint(min, 2) + "m:"; } uint64_t sec = (seconds % ONE_MIN); text += fmt_uint(sec, 2) + "s"; return text; } std::string fmt_timeduration_ms(uint64_t microseconds) { auto s = microseconds / THOUSAND; auto ms = microseconds % THOUSAND; auto text = fmt_timeduration_s(s); text += "." + fmt_uint(ms, 3) + "ms"; return text; } std::string fmt_timeduration_us(uint64_t nanoseconds) { auto s = nanoseconds / MILLION; auto ms = nanoseconds % MILLION; auto text = fmt_timeduration_s(s); text += "." + fmt_uint(ms, 6) + "us"; return text; } } // namespace cutl
4. 测试代码
#include "common.hpp" #include "strfmt.h" void TestFormatDurationTime() { PrintSubTitle("TestFormatDurationTime"); // 180100345), "2d:2h:1m:40s:345ms" std::cout << "duration1: " << cutl::fmt_timeduration_s(180100) << std::endl; std::cout << "duration2: " << cutl::fmt_timeduration_ms(180100345) << std::endl; std::cout << "duration3: " << cutl::fmt_timeduration_us(180100345678) << std::endl; }
5. 运行结果
---------------------------------------TestFormatDurationTime--------------------------------------- duration1: 2d:02h:01m:40s duration2: 2d:02h:01m:40s.345ms duration3: 2d:02h:01m:40s.345678us
6. 源码地址
更多详细代码,请查看本人写的C++ 通用工具库: common_util, 本项目已开源,代码简洁,且有详细的文档和Demo。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战