strftime
函数 <ctime>
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 |
缩写工作日的名字 * |
Thu |
%A |
完整的工作日的名字 * |
Thursday |
%b |
缩写月份的名字 * |
Aug |
%B |
月份的全名字 * |
August |
%c |
日期和时间表示 * |
Thu Aug 23 14:55:02 2001 |
%C |
年除以100并截断为整数(00-99) |
20 |
%d |
月的某一天,填零(01-31) |
23 |
%D |
MM/DD/YY短日期,相当于%m/%d/%y |
08/23/01 |
%e |
月的某一天,填空格( 1-31) |
23 |
%F |
YYYY-MM-DD短日期,相当于%Y-%m-%d |
2001-08-23 |
%g |
以周为单位的年,最后两位数字(00-99) |
01 |
%G |
以周为单位的年 |
2001 |
%h |
缩写月份名 *(与%b相同) |
Aug |
%H |
24小时制(00-23) |
14 |
%I |
12小时格式(01-12) |
02 |
%j |
一年中的某一天(001-366) |
235 |
%m |
十进制月份(01-12) |
08 |
%M |
分钟(00-59) |
55 |
%n |
换行符(“\ n”) |
|
%p |
上午或下午 |
pm |
%r |
12小时的时钟时间 * |
02:55:02 pm |
%R |
24小时HH:MM时间,相当于%H:%M |
14:55 |
%S |
秒 (00-61) |
02 |
%t |
水平制表符(“\ t”) |
|
%T |
ISO 8601时间格式(HH:MM:SS),相当于%H:%M:%S |
14:55:02 |
%u |
ISO 8601工作日编号,星期一为1 (1-7) |
4 |
%U |
以第一周第一天为一周的周数(00-53) |
33 |
%V |
ISO 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 |
%z |
ISO 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)。
☉ 返回值
一个指向
tm结构的指针,其成员中填充了与timer的本地时间表示相对应的值。
返回值指向一个内部对象,该对象的有效性或值可能会被随后调用
gmtime
或
localtime所更改。
☣ 示例
/* localtime example */
#include <stdio.h> /* puts, printf */
#include <time.h> /* time_t, struct tm, time, localtime */
int main ()
{
time_t rawtime;
struct tm * timeinfo;
time (&rawtime);
timeinfo = localtime (&rawtime);
printf ("Current local time and date: %s", asctime(timeinfo));
return 0;
} |
输出:
Current local time and date: Wed Feb 13 17:17:11 2013
↭ 数据竞争
函数访问timer指向的对象。
该函数还访问和修改一个共享的内部对象,
这可能会在对
gmtime
和
localtime的并发调用中引入数据竞争。
一些库提供了避免这种数据竞争的替代函数:localtime_r (不可移植)。
❆ 异常(c++)
无抛出保证:此函数从不抛出异常。
🍄 另请参阅
asctime |
转换tm结构为字符串(function ) |
ctime |
将time_t值转换为字符串(function) |