如何在C++中将h:m:s时间格式转换为hh:mm:ss格式?
如何在C++中将h:m:s格式转换为hh:mm:ss格式
下面给你几个适合新手的实现方法,代码都带注释,容易理解:
方法1:用C风格格式化函数(简单易上手)
通过sscanf解析原始时间字符串,再用sprintf格式化输出,不足两位的数字自动补0。
#include <cstdio> #include <string> int main() { const char* raw_time = "5:4:9"; int hour, minute, second; // 从字符串里提取时、分、秒,忽略冒号分隔符 sscanf(raw_time, "%d:%d:%d", &hour, &minute, &second); char formatted[9]; // 存储hh:mm:ss(8个字符+结束符) // %02d表示输出两位整数,不足补0 sprintf(formatted, "%02d:%02d:%02d", hour, minute, second); printf("转换结果:%s\n", formatted); // 输出 05:04:09 return 0; }
方法2:纯C++流操作风格
用C的字符串流解析和格式化,不需要依赖C风格函数,更贴合C语法习惯。
#include <iostream> #include <sstream> #include <iomanip> #include <string> int main() { std::string raw_time = "5:4:9"; int hour, minute, second; char colon; // 用来读取冒号分隔符 std::istringstream input_stream(raw_time); // 按格式读取时分秒 input_stream >> hour >> colon >> minute >> colon >> second; std::ostringstream output_stream; // 设置填充字符为0,输出宽度为2 output_stream << std::setfill('0') << std::setw(2) << hour << ":" << std::setw(2) << minute << ":" << std::setw(2) << second; std::string formatted_time = output_stream.str(); std::cout << "转换结果:" << formatted_time << std::endl; // 输出 05:04:09 return 0; }
注意:std::setw只对紧随其后的输出生效,所以每个时间分量都要设置一次;std::setfill是持久生效的,设置一次即可。
方法3:用C++11+的时间专用格式化工具
如果你的编译器支持C++11及以上版本,可以用std::put_time专门处理时间格式化,适合后续需要扩展时间操作的场景。
#include <iostream> #include <sstream> #include <iomanip> #include <string> #include <ctime> int main() { std::string raw_time = "5:4:9"; int hour, minute, second; char colon; std::istringstream input_stream(raw_time); input_stream >> hour >> colon >> minute >> colon >> second; std::tm time_struct = {}; time_struct.tm_hour = hour; time_struct.tm_min = minute; time_struct.tm_sec = second; std::ostringstream output_stream; // %H表示24小时制的小时(两位),%M是分钟,%S是秒 output_stream << std::put_time(&time_struct, "%H:%M:%S"); std::string formatted_time = output_stream.str(); std::cout << "转换结果:" << formatted_time << std::endl; // 输出 05:04:09 return 0; }
内容的提问来源于stack exchange,提问作者Quân Nguyễn Minh
相关产品推荐
相关产品推荐

