函数
<ctime>

strftime

size_t strftime (char* ptr, size_t maxsize, const char* format,                 const struct tm* timeptr );
将时间格式化为字符串
format 的内容复制到 ptr 中,并展开其格式说明符,替换为 timeptr 所描述时间对应的相应值,最大复制 maxsize 个字符。

参数

ptr
指向结果 C 字符串的存储区的指针。
maxsize
ptr 中可复制的最大字符数,包括终止的空字符
format
C 字符串,包含任意组合的普通字符和特殊格式说明符。这些格式说明符将被函数替换为 timeptr 指定时间的相应值。它们都以百分号 (%) 开始,具体如下:
说明符替换为示例
%a星期缩写名称 *周四
%A星期全称 *星期四
%b月份缩写名称 *八月
%B月份全称 *八月
%c日期和时间表示 *2001年8月23日星期四 14:55:02
%C年份除以 100 并截断为整数 (00-99)20
%d月份的第几天,零填充 (01-31)23
%D简写 MM/DD/YY 日期,等同于 %m/%d/%y08/23/01
%e月份的第几天,空格填充 ( 1-31)23
%F简写 YYYY-MM-DD 日期,等同于 %Y-%m-%d2001-08-23
%g基于周的年份,最后两位数字 (00-99)01
%G基于周的年份2001
%h月份缩写名称 * (与 %b 相同)八月
%H24 小时制的小时 (00-23)14
%I12 小时制的小时 (01-12)02
%j一年中的第几天 (001-366)235
%m月份的十进制数 (01-12)08
%M分钟 (00-59)55
%n换行符 ('\n')
%p上午或下午的标识下午
%r12 小时制时钟时间 *02:55:02 下午
%R24 小时制 HH:MM 时间,等同于 %H:%M14:55
%S秒 (00-61)02
%t水平制表符 ('\t')
%TISO 8601 时间格式 (HH:MM:SS),等同于 %H:%M:%S14:55:02
%uISO 8601 星期几,以周一为 1 (1-7)4
%U周数,以第一个星期日为第一个星期一的第一天 (00-53)33
%VISO 8601 周数 (01-53)34
%w星期几的十进制数,以周日为 0 (0-6)4
%W周数,以第一个星期一为第一个星期一的第一天 (00-53)34
%x日期表示 *08/23/01
%X时间表示 *14:55:02
%y年份,最后两位数字 (00-99)01
%Y年份2001
%zISO 8601 时区与 UTC 的偏移量 (1 分钟=1,1 小时=100)
如果无法确定时区,则不输出任何字符
+100
%Z时区名称或缩写 *
如果无法确定时区,则不输出任何字符
CDT
%%一个百分号 (%)%
* 标有星号 (*) 的说明符是区域设置相关的。
注意:黄色行表示 C99 引入的说明符和子说明符。自 C99 起,两个与区域设置相关的修饰符也可以插入在百分号 (%) 和说明符本身之间,以便在适用时请求替代格式。
修饰符含义适用于
E使用区域设置的替代表示法%Ec %EC %Ex %EX %Ey %EY
O使用区域设置的替代数字符号%Od %Oe %OH %OI %Om %OM %OS %Ou %OU %OV %Ow %OW %Oy
timeptr
指向一个 tm 结构体的指针,该结构体包含一个分解为其各组成部分的日历时间(请参见 struct tm)。

返回值

如果结果 C 字符串的长度(包括终止的空字符)不超过 maxsize,则函数返回复制到 ptr 的总字符数(不包括终止的空字符)。
否则,它返回零,并且 ptr 指向的数组的内容是不确定的。

兼容性

特定的库实现可能支持额外的说明符或组合。
此处列出的说明符由最新的 C 和 C++ 标准(均于 2011 年发布)支持,但黄色标注的说明符是在 C99 中引入的(自 C++11 起才被 C++ 实现要求),并且可能不被符合旧标准的库支持。

示例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
/* strftime example */
#include <stdio.h>      /* puts */
#include <time.h>       /* time_t, struct tm, time, localtime, strftime */

int main ()
{
  time_t rawtime;
  struct tm * timeinfo;
  char buffer [80];

  time (&rawtime);
  timeinfo = localtime (&rawtime);

  strftime (buffer,80,"Now it's %I:%M%p.",timeinfo);
  puts (buffer);

  return 0;
}

示例输出

Now it's 03:21PM.


数据竞争

函数访问 format 指向的数组和 timeptr 指向的对象。成功时,它还会修改 ptr 指向的数组中的元素。
并发地更改 locale 设置也可能引入数据竞争。

异常 (C++)

无异常保证:此函数从不抛出异常。

另见