📅  最后修改于: 2023-12-03 14:39:37.286000             🧑  作者: Mango
在 C/C++ 程序开发中,时间日期的处理是一项非常重要的任务。strftime() 函数是一种非常有用的日期时间格式化工具,它可以将时间日期转换为各种不同格式的字符串。本文将介绍 strftime() 函数的用法和基本语法。
strftime() 函数有两个参数:第一个参数是要输出的字符串的地址,第二个参数是一个 tm 结构体,它包含了要格式化的时间信息。
size_t strftime(char *s, size_t max, const char *format, const struct tm *tm);
s
:字符串输出缓冲区的地址。输出的日期时间格式将被写入该缓冲区。max
:缓冲区的大小。format
:日期时间输出格式的字符串。该格式字符串由特定的格式占位符组成。这些格式占位符会被 strftime() 函数替换为实际的日期时间数值。下面将介绍一些常用的日期时间格式占位符。tm
:指向要格式化的时间的 tm 结构体指针。下面列出了一些常用的格式占位符:
| 格式占位符 | 说明 | 示例输出 |
| --- | --- | --- |
| %a
| 缩写星期几名 | Sun |
| %A
| 完整星期几名 | Sunday |
| %b
| 缩写月份名 | Jan |
| %B
| 完整月份名 | January |
| %c
| 完整日期时间 | Sun Jan 19 14:12:01 2020 |
| %d
| 01 至 31 的十进制数,带前导零 | 01 |
| %H
| 00 至 23 的十进制小时数,带前导零 | 14 |
| %I
| 01 至 12 的十进制小时数,带前导零 | 02 |
| %j
| 001 至 366 的十进制天数,带前导零 | 019 |
| %m
| 01 至 12 的十进制月份,带前导零 | 01 |
| %M
| 00 至 59 的十进制分钟数,带前导零 | 12 |
| %p
| AM 或 PM | PM |
| %S
| 00 至 59 的十进制秒数,带前导零 | 01 |
| %U
| 一年中第几周,从第一个星期日开始计数 | 03 |
| %w
| 一周中的第几天,从星期日开始计数 | 0 |
| %W
| 一年中第几周,从第一个星期一开始计数 | 02 |
| %x
| 日期 | 01/19/20 |
| %X
| 时间 | 14:12:01 |
| %y
| 两位数的年份 | 20 |
| %Y
| 四位数的年份 | 2020 |
| %Z
| 时区 | CST |
| %%
| 百分号 | % |
下面是一个示例代码,它演示了如何使用 strftime() 函数将时间日期格式化为一个字符串并输出。
#include <stdio.h>
#include <time.h>
int main() {
time_t now;
struct tm *tm;
char buff[100];
time(&now);
tm = localtime(&now);
strftime(buff, 100, "%Y-%m-%d %H:%M:%S", tm);
printf("当前时间是 %s\n", buff);
return 0;
}
输出结果如下所示:
当前时间是 2021-10-20 10:30:00
strftime() 函数是日期时间格式化的重要工具,它使用格式占位符将时间日期转换为各种不同格式的字符串。在程序开发中,了解如何使用 strftime() 函数可以大大简化时间日期处理的工作。