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
ICP备案:
公安联网备案: