当前位置: 首页>>代码示例 >>用法及示例精选 >>正文


C++ strftime()用法及代码示例


C++ 中的strftime() 函数根据格式字符串将给定日期和时间从给定日历时间时间转换为以空值结尾的多字节字符串。

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

strftime()原型

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

strftime() 函数采用 4 个参数:str , count , formattime

time 指向的日期和时间信息根据format 的值转换为以null 结尾的多字节字符,并存储在str 指向的数组中。最多写入count 个字节。

参数:

  • str:指向字符数组的第一个元素的指针以存储结果。
  • count:要写入的最大字节数。
  • format: 指向指定转换格式的以空字符结尾的多字节字符串的指针。格式字符串由转换说明符(以 % 开头,可选地后跟 E 或 O)和其他普通字符组成。
    包括终止空字符在内的普通字符按原样复制到输出字符串。
    strftime() 格式说明符
    转换说明符 说明 使用领域
    % 写入字符 %
    n 写入换行符
    t 写入水平制表符
    Year
    Y 写入 4 位年份,例如2011 tm_year
    EY 以语言环境的替代表示形式写入 4 位年份 tm_year
    y 写入年份的最后 2 位数字,范围 [00, 99] tm_year
    Oy 以语言环境的替代表示形式写入年份的最后 2 位数字 tm_year
    Ey 将年份写入区域设置的替代日历期间的偏移量 %EC (locale-dependent) 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
    Month
    b 写入缩写的月份名称,例如简 tm_mon
    h 与 b 相同 tm_mon
    B 写完整的月份名称,例如一月 tm_mon
    m 将月份写入十进制数,范围 [01,12] tm_mon
    Om 使用区域设置的替代数字系统写入月份 tm_mon
    Week
    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 写下工作日的缩写名称,例如周五(取决于地区) tm_wday
    A 写完整的工作日名称,例如星期五(取决于地区) 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
    Other
    c 写入标准日期和时间字符串,例如2010 年 10 月 17 日星期日 04:41:13(取决于区域设置) all
    Ec 写入语言环境的替代日期和时间字符串 all
    x 写入本地化日期表示(取决于区域设置) all
    Ex 写入语言环境的替代日期表示 all
    X 写入本地化时间表示(取决于区域设置) all
    EX 写入语言环境的替代时间表示 all
    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 写入本地化的上午或下午(取决于地区) tm_hour
    z 以 ISO 8601 格式(例如 -0545)写入与 UTC 的偏移量,如果时区信息不可用,则不写入字符 tm_isdst
    Z 写入时区名称或缩写,如果时区信息不可用则不写入(取决于区域设置) tm_isdst
  • time :要转换的日期和时间信息。

返回:

  • 成功时,strftime() 函数返回写入 str 指向的字符数组的字节数,不包括终止的 '\0'。
  • 如果在可以存储整个字符串之前达到计数,则返回 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

相关用法


注:本文由纯净天空筛选整理自 C++ strftime()。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。