strftime() 函数定义在 <ctime> 头文件中。
strftime() 原型
size_t strftime( char* str, size_t count, const char* format, const tm* time );
strftime() 函数有 4 个参数:str、count、format 和 time。
根据 format 的值,将 time 指向的日期和时间信息转换为一个以 null 结尾的多字节字符,并存储在 str 指向的 数组 中。最多写入 count 个字节。
strftime() 参数
- str:指向用于存储结果的字符数组的第一个元素的 指针。
- count:要写入的最大字节数。
- format:指向一个以 null 结尾的多字节字符 字符串,用于指定转换的格式。格式字符串由转换说明符(以 % 开头,后跟可选的 E 或 O)和其他普通字符组成。
普通字符(包括终止的 null 字符)将按原样复制到输出字符串。strftime() 格式说明符 转换说明符 描述 使用的字段 % 写入字符 % n 写入换行符 t 写入水平制表符 年份 Y 写入年份的 4 位数字,例如 2011 tm_year EY 以本地化的替代表示法写入年份的 4 位数字 tm_year y 写入年份的最后 2 位数字,范围 [00, 99] tm_year Oy 以本地化的替代表示法写入年份的最后 2 位数字 tm_year Ey 以本地化的替代日历周期 %EC 偏移量写入年份(取决于本地化设置) tm_year C 写入年份的前 2 位数字,范围 [00,99] tm_year EC 以本地化的替代表示法写入基准年份(周期)的名称, tm_year G 写入 ISO 8601 周基准年份,即包含指定周的年份。 tm_year, tm_wday, tm_yday g 写入 ISO 8601 周基准年份的最后 2 位数字,即包含指定周的年份(范围 [00,99])。 tm_year, tm_wday, tm_yday 月份 b 写入缩写的月份名称,例如 Jan tm_mon h 与 b 相同 tm_mon B 写入完整的月份名称,例如 January tm_mon m 以十进制数写入月份,范围 [01,12] tm_mon Om 使用本地化的替代数字系统写入月份 tm_mon 周 U 以十进制数写入一年中的周数,范围 00 到 53(星期日是一周的第一天) tm_year, tm_wday, tm_yday OU 使用替代数字系统以 %U 的方式写入一年中的周数 tm_year, tm_wday, tm_yday W 以十进制数写入一年中的周数,范围 00 到 53(星期一是第一天) tm_year, tm_wday, tm_yday OW 使用替代数字系统以 %W 的方式写入一年中的周数 tm_year, tm_wday, tm_yday V 写入 ISO 8601 的周数(范围 [01,53])。 tm_year, tm_wday, tm_yday OV 使用替代数字系统以 %V 的方式写入一年中的周数 tm_year, tm_wday, tm_yday 一年/一月中的天数 j 以十进制数写入一年中的天数,范围 [001,366] tm_yday d 以十进制数写入一月中的天数,范围 [01,31] tm_mday Od 使用本地化的替代数字系统以 %d 的方式写入一月中的天数 tm_mday e 以十进制数写入一月中的天数,范围 [1,31] tm_mday Oe 使用本地化的替代数字系统以 %e 的方式写入一月中的天数 tm_mday 星期中的天数 a 写入缩写的星期名称,例如 Fri(取决于本地化设置) tm_wday A 写入完整的星期名称,例如 Friday(取决于本地化设置) tm_wday w 以十进制数写入星期,范围 [0-6](星期日为 0) tm_wday Ow 使用本地化的替代数字系统以 %w 的方式写入星期 tm_wday u 以十进制数写入星期,星期一为 1(ISO 8601 格式),范围 [1-7] tm_wday Ou 使用本地化的替代数字系统以 %u 的方式写入星期 tm_wday 小时、分钟、秒 H 以十进制数写入小时,范围 [00,23] tm_hour OH 使用本地化的替代数字系统以 %H 的方式写入小时 tm_hour I 以十进制数写入小时,范围 [01,12] tm_hour OI 使用本地化的替代数字系统以 %I 的方式写入小时 tm_hour M 以十进制数写入分钟,范围 [00,59] tm_min OM 使用本地化的替代数字系统以 %M 的方式写入分钟 tm_min S 以十进制数写入秒,范围 [00,60] tm_sec OS 使用本地化的替代数字系统以 %S 的方式写入秒 tm_sec 其他 c 写入标准的日期和时间字符串,例如 Sun Oct 17 04:41:13 2010(取决于本地化设置) 全部 Ec 写入本地化的替代日期和时间字符串 全部 x 写入本地化的日期表示(取决于本地化设置) 全部 Ex 写入本地化的替代日期表示 全部 X 写入本地化的时间表示(取决于本地化设置) 全部 EX 写入本地化的替代时间表示 全部 D 相当于 "%m/%d/%y" tm_mon, tm_mday, tm_year F 相当于 "%Y-%m-%d" tm_mon, tm_mday, tm_year r 写入本地化的 12 小时制时间 tm_hour, tm_min, tm_sec R 相当于 "%H:%M" tm_hour, tm_min T 相当于 "%H:%M:%S tm_hour, tm_min, tm_sec P 写入本地化的 a.m. 或 p.m.(取决于本地化设置) tm_hour z 以 ISO 8601 格式写入与 UTC 的偏移量(例如 -0545),如果时区信息不可用则不写入任何字符 tm_isdst Z 写入时区名称或缩写,如果时区信息不可用则不写入(取决于本地化设置) tm_isdst - time:要转换的日期和时间信息。
strftime() 返回值
- 成功时,strftime() 函数返回写入 str 指向的字符数组中的字节数,不包括终止的 '\0'。
- 如果在存储整个字符串之前达到了 count 的限制,则返回 0,并且内容未定义。
示例:strftime() 函数如何工作?
#include <ctime>
#include <iostream>
using namespace std;
int main()
{
time_t curr_time;
tm * curr_tm;
char date_string[100];
char time_string[100];
time(&curr_time);
curr_tm = localtime(&curr_time);
strftime(date_string, 50, "Today is %B %d, %Y", curr_tm);
strftime(time_string, 50, "Current time is %T", curr_tm);
cout << date_string << endl;
cout << time_string << endl;
return 0;
}
运行程序后,输出将是
Today is April 21, 2017 Current time is 11:20:42
另请阅读