C语言strftime():将时间格式化为字符串
strftime() 是 C语言的一个标准库函数,定义在
strftime() 函数的功能是根据指定的格式将 struct tm 类型的时间信息转换为一个字符串。该函数的原型如下:
【实例】以下的 C语言示例代码演示了 strftime() 函数将一个 tm 结构体转换为特定格式的字符串,并打印结果。
<time.h>
头文件中。strftime() 函数的功能是根据指定的格式将 struct tm 类型的时间信息转换为一个字符串。该函数的原型如下:
size_t strftime(char* ptr, size_t max, const char* format, const struct tm* tm);
参数
- ptr:指向一个字符数组,用来存放格式化后的时间字符串。
- maxsize:表示存放到 ptr 数组中的最大字符个数。
- format:格式控制,包括普通字符和格式字符,最终格式字符会被 tm 指向的数据取代。格式字符及含义如下表所示。
- tm:指向包含日期和时间信息的 struct tm 类型变量。
格式字符 | 含义 | 举例 |
---|---|---|
%a | 星期几的简写 | Thu |
%A | 星期几的全称 | Thursday |
%b | 月份的简写 | Aug |
%B | 月份的全称 | August |
%c | 标准日期和时间 | Sun Aug 01 15:34:07 2010 |
%d | 每月的第几天 | 01 |
%H | 24 小时制的小时(00~23) | 15 |
%l | 12 小时制的小时(01~12) | 03 |
%j | 一年中的第几天(0~366) | 213 |
%m | 月份(01~12) | 08 |
%M | 分钟(00~59) | 34 |
%p | AM 或 PM 标志 | PM |
%S | 秒 | 07 |
%U | 每年的第几周 | 31 |
%w | 星期几(0~6,0 表示星期日) | 0 |
%W | 每年的第几周(星期一作为每周的第 1 天) | 30 |
%x | 标准的日期串 | Sun Aug 01 2010 |
%X | 标准的时间串 | 15:34:07 |
%y | 两位数字表示的年份 | 10 |
%Y | 年份 | 2010 |
%z | 时区名称 | 中国标准时间 |
%% | 百分号 | % |
返回值
如果 ptr 数组中字符串的长度(包括末尾的 '\0')不超过 max,函数返回 ptr 数组中字符的总数量(不包括末尾的 '\0'),否则函数返回 0,并且 ptr 数组中存储的内容是不确定的。【实例】以下的 C语言示例代码演示了 strftime() 函数将一个 tm 结构体转换为特定格式的字符串,并打印结果。
#include <stdio.h> #include <time.h> int main() { struct tm time_info; char buffer[80]; // 设置tm结构体为2023年8月17日08:34:56 time_info.tm_year = 2023 - 1900; // 年份从1900年开始 time_info.tm_mon = 8 - 1; // 月份从0开始 time_info.tm_mday = 17; // 日 time_info.tm_hour = 8; // 小时 time_info.tm_min = 34; // 分钟 time_info.tm_sec = 56; // 秒 time_info.tm_isdst = -1; // 让mktime()自动检测夏令时 // 使用指定的格式将时间格式化为字符串 size_t result = strftime(buffer, sizeof(buffer), "现在是 %Y-%m-%d %H:%M:%S", &time_info); if (result != 0) { printf("%s\n", buffer); } else { printf("时间格式化失败\n"); } return 0; }输出结果为:
现在是 2023-08-17 08:34:56