C++中格式化日期时间常用strftime和put_time。1. strftime来自C,需字符数组,格式如"%Y-%m-%d %H:%M:%S";2. put_time为C++11流操作符,配合cout或ostringstream使用,更简洁;3. 前者兼容性好,后者可读性强但依赖locale设置。

在C++中格式化日期时间,常用的方法是使用标准库中的 strftime 和 C++11 引入的 put_time。它们都能将时间信息按指定格式输出为字符串,但使用场景和语法略有不同。下面详细介绍两者的用法。
strftime:C风格的时间格式化
strftime 是来自C语言的函数,定义在
函数原型如下:
size_t strftime(char* str, size_t maxsize, const char* format, const struct tm* timeptr);参数说明:
立即学习“C++免费学习笔记(深入)”;
- str:输出的字符数组
- maxsize:字符数组最大长度
- format:格式化字符串(如 "%Y-%m-%d %H:%M:%S")
- timeptr:指向 tm 结构体的指针
示例代码:
#include iostream>#include
int main() {
std::time_t t = std::time(nullptr);
std::tm* local_tm = std::localtime(&t);
char buffer[100];
std::strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", local_tm);
std::cout return 0;
}
常见格式化符号:
- %Y:四位年份(如 2025)
- %m:月份(01-12)
- %d:日期(01-31)
- %H:小时(00-23)
- %M:分钟(00-59)
- %S:秒(00-60)
- %A:星期几全名(如 Monday)
- %B:月份全名(如 January)
put_time:C++流风格的时间格式化
put_time 是 C++11 引入的,定义在
它本身是一个流操作符,不能单独调用,必须与流一起使用。
示例代码:
#include#include
#include
#include
int main() {
std::time_t t = std::time(nullptr);
std::tm* tm_ptr = std::localtime(&t);
// 输出到 cout
std::cout
// 输出到字符串
std::ostringstream oss;
oss std::string result = oss.str();
std::cout return 0;
}
注意:put_time 依赖于本地环境的 locale 设置。如果输出乱码或为空,可能需要设置 locale:
std::cout.imbue(std::locale("zh_CN.UTF-8"));strftime 与 put_time 对比
两者都能实现时间格式化,选择取决于你的使用习惯和项目需求。
- strftime 更适合 C 风格程序或需要直接写入字符数组的场景,兼容性好,控制精细
- put_time 更适合 C++ 流式输出,代码更简洁,可读性强,尤其适合日志、字符串拼接等场景
注意:put_time 不支持所有平台默认启用宽字符或特定 locale,跨平台时需测试。
基本上就这些。根据项目选择合适的方式即可。










