C++ strftime()

strftime() 函数定义在 <ctime> 头文件中。

strftime() 原型

size_t strftime( char* str, size_t count, const char* format, const tm* time );

strftime() 函数有 4 个参数:strcountformattime

根据 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

另请阅读

你觉得这篇文章有帮助吗?

我们的高级学习平台,凭借十多年的经验和数千条反馈创建。

以前所未有的方式学习和提高您的编程技能。

试用 Programiz PRO
  • 交互式课程
  • 证书
  • AI 帮助
  • 2000+ 挑战