strftime是C语言标准库中用来格式化输出时间的的函数。Ubuntu自带的manual手册说法如下,截图没有截全,需要更详细信息的自行查看相关的内容。下面是strftime的用法
示例代码如下
#include
#include
#define print(s1, s2,s3) \
printf("%-20s%-30s%s\n",s1, s2,s3);
int main()
{
time_t rawtime;
struct tm* timeinfo;
char timE[80];
/* time(&rawtime); */
rawtime = 31507200;
timeinfo=localtime(&rawtime);
strftime(timE,80,"%F %X",timeinfo);
printf("时间为:%s\n",timE);
print( "格式控制符", "输出结果", "格式控制说明" );
strftime(timE,80,"%Y",timeinfo);
print( "%Y", timE,"年" );
strftime(timE,80,"%m",timeinfo);
print( "%m", timE,"月" );
strftime(timE,80,"%d",timeinfo);
print( "%d", timE,"日" );
strftime(timE,80,"%H",timeinfo);
print( "%H", timE,"时" );
strftime(timE,80,"%M",timeinfo);
print( "%M", timE,"分" );
strftime(timE,80,"%S",timeinfo);
print( "%S", timE,"秒" );
strftime(timE,80,"%a",timeinfo);
print( "%a", timE,"根据当前区域设置,一周中某一天的缩写名称" );
strftime(timE,80,"%A",timeinfo);
print( "%A", timE,"根据当前区域设置显示一周中某一天的全名" );
strftime(timE,80,"%b",timeinfo);
print( "%b", timE,"根据当前区域设置的缩写月份名称" );
strftime(timE,80,"%B",timeinfo);
print( "%B", timE,"根据当前区域设置的完整月份名称" );
strftime(timE,80,"%c",timeinfo);
print( "%c", timE,"当前区域设置的首选日期和时间表示形式" );
strftime(timE,80,"%C",timeinfo);
print( "%C", timE,"世纪数(年/100)为2位整数" );
strftime(timE,80,"%d",timeinfo);
print( "%d", timE,"以十进制数字表示的月份的日期(范围为01到31)。" );
strftime(timE,80,"%D",timeinfo);
print( "%D", timE,"相当于%m/%D/%y。" );
print( "", "","(Yecch仅适用于美国人。美国人应注意,在其他国家%d/%m/%y相当普遍。" );
print( "", "","这意味着在国际背景下,这种格式是模糊的,不应使用。)" );
strftime(timE,80,"%e",timeinfo);
print( "%e", timE,"与%d类似,是一个十进制数字,但前导零被空格替换。" );
/* strftime(timE,80,"%E",timeinfo); */
/* print( "%E", timE,"与%d类似,是一个十进制数字,但前导零被空格替换。" ); */
strftime(timE,80,"%F",timeinfo);
print( "%F", timE, "相当于%Y-%m-%d(ISO 8601日期格式)。(C99)使用" );
strftime(timE,80,"%G",timeinfo);
print( "%G", timE, "ISO 8601基于周的年份(见注释),世纪为小数。" );
print( "", "", "与ISO周数对应的4位年份(见%V)。它的格式和值与%Y相同,只是如果ISO周数属于上一年或下一年,则使用该年。" );
print( "", "", "(TZ)(根据tm年、tm日和tm日计算)" );
strftime(timE,80,"%g",timeinfo);
print( "%g", timE, "类似于%G,但没有世纪,也就是说,有两位数的年份(00–99)。(TZ)(根据tm年、tm日和tm日计算)" );
strftime(timE,80,"%h",timeinfo);
print( "%h", timE, "相当于%b。" );
strftime(timE,80,"%H",timeinfo);
print( "%H", timE, "使用24小时时钟(范围为00到23)将小时表示为十进制数字。" );
strftime(timE,80,"%I",timeinfo);
print( "%I", timE, "使用12小时时钟(范围01至12)将小时作为十进制数字。" );
strftime(timE,80,"%j",timeinfo);
print( "%j", timE, "以十进制数字表示的一年中的某一天(范围001至366)。" );
strftime(timE,80,"%k",timeinfo);
print( "%k", timE, "小时(24小时时钟)为十进制数(范围0至23);单个数字前面有一个空格。" );
strftime(timE,80,"%I",timeinfo);
print( "%I", timE, "小时(12小时时钟)为十进制数字(范围1至12);单个数字前面有一个空格。(另见%I.)" );
strftime(timE,80,"%m",timeinfo);
print( "%m", timE, "以十进制数字表示月份(范围为01到12)。" );
strftime(timE,80,"%M",timeinfo);
print( "%M", timE, "以十进制数字表示的分钟(范围为00到59)。" );
/* strftime(timE,80,"%O",timeinfo); */
/* print( "%O", timE, "修改器:使用替代格式,见下文。" ); */
strftime(timE,80,"%p",timeinfo);
print( "%p", timE, "根据给定的时间值选择“AM”或“PM”,或当前区域设置的对应字符串。" );
strftime(timE,80,"%P",timeinfo);
print( "%P", timE, "类似于%P,但小写:“am”或“pm”或相应的字符串对于当前区域设置。" );
strftime(timE,80,"%r",timeinfo);
print( "%r", timE, "以a.m.或p.m.符号表示的时间。在POSIX语言环境中,这是相当于%I:%M:%S%p。" );
strftime(timE,80,"%R",timeinfo);
print( "%R", timE, "以24小时表示的时间(%H:%M)。(SU)一个版本包括秒数,请参见下面的%T。" );
strftime(timE,80,"%s",timeinfo);
print( "%s", timE, "是从纪元开始的秒数,1970-01-01 00:00:00+0000(UTC)。(TZ)(根据mktime(tm)计算)" );
strftime(timE,80,"%S",timeinfo);
print( "%S", timE, "为十进制数(范围为00到60)。(范围为最多60秒,以允许偶尔的闰秒。)(计算来自tm_sec.)" );
strftime(timE,80,"%T",timeinfo);
print( "%T", timE, "以24小时表示的时间(%H:%M:%S)。" );
strftime(timE,80,"%u",timeinfo);
print( "%u", timE, "一周中的某一天为十进制,范围为1到7,星期一为1。另见%w。" );
strftime(timE,80,"%U",timeinfo);
print( "%U", timE, "当前年份的周数为十进制数,范围为00至53,从第一个星期日开始,为第一周。另请参见%V和%W(根据tm_yday和星期四)" );
strftime(timE,80,"%V",timeinfo);
print( "%V", timE, "本年度的ISO 8601周数(见注释)作为十进制数,范围为01到53,其中第1周为第一周新年至少有4天。" );
strftime(timE,80,"%w",timeinfo);
print( "%w", timE, "一周中的某一天为十进制,范围为0到6,星期日为0。 另见%u。" );
strftime(timE,80,"%k",timeinfo);
print( "%W", timE, "当前年份的周数为十进制数,范围为00至53,从第一个星期一开始为第一周。" );
strftime(timE,80,"%x",timeinfo);
print( "%x", timE, "当前区域设置的首选日期表示形式,不带时间。" );
strftime(timE,80,"%X",timeinfo);
print( "%X", timE, "当前l的首选时间表示形式" );
char YYYYmmdd[9] = {0};
char HHMMSS[10] = {0};
strftime(YYYYmmdd,sizeof(YYYYmmdd),"%Y%m%d",timeinfo);
strftime(HHMMSS,sizeof(HHMMSS),"%H-%M-%S",timeinfo);
return 0;
}
上述程序运行结果如下:
时间为:1971-01-01 00:00:00
格式控制符 输出结果 格式控制说明
%Y 1971 年
%m 01 月
%d 01 日
%H 00 时
%M 00 分
%S 00 秒
%a Fri 根据当前区域设置,一周中某一天的缩写名称
%A Friday 根据当前区域设置显示一周中某一天的全名
%b Jan 根据当前区域设置的缩写月份名称
%B January 根据当前区域设置的完整月份名称
%c Fri Jan 1 00:00:00 1971 当前区域设置的首选日期和时间表示形式
%C 19 世纪数(年/100)为2位整数
%d 01 以十进制数字表示的月份的日期(范围为01到31)。
%D 01/01/71 相当于%m/%D/%y。
(Yecch仅适用于美国人。美国人应注意,在其他国家%d/%m/%y相当普遍。
这意味着在国际背景下,这种格式是模糊的,不应使用。)
%e 1 与%d类似,是一个十进制数字,但前导零被空格替换。
%F 1971-01-01 相当于%Y-%m-%d(ISO 8601日期格式)。(C99)使用
%G 1970 ISO 8601基于周的年份(见注释),世纪为小数。
与ISO周数对应的4位年份(见%V)。它的格式和值与%Y相同,只是如果ISO周数属于上一年或下一年,则使用该年。
(TZ)(根据tm年、tm日和tm日计算)
%g 70 类似于%G,但没有世纪,也就是说,有两位数的年份(00–99)。(TZ)(根据tm年、tm日和tm日计算)
%h Jan 相当于%b。
%H 00 使用24小时时钟(范围为00到23)将小时表示为十进制数字。
%I 12 使用12小时时钟(范围01至12)将小时作为十进制数字。
%j 001 以十进制数字表示的一年中的某一天(范围001至366)。
%k 0 小时(24小时时钟)为十进制数(范围0至23);单个数字前面有一个空格。
%I 12 小时(12小时时钟)为十进制数字(范围1至12);单个数字前面有一个空格。(另见%I.)
%m 01 以十进制数字表示月份(范围为01到12)。
%M 00 以十进制数字表示的分钟(范围为00到59)。
%p AM 根据给定的时间值选择“AM”或“PM”,或当前区域设置的对应字符串。
%P am 类似于%P,但小写:“am”或“pm”或相应的字符串对于当前区域设置。
%r 12:00:00 AM 以a.m.或p.m.符号表示的时间。在POSIX语言环境中,这是相当于%I:%M:%S%p。
%R 00:00 以24小时表示的时间(%H:%M)。(SU)一个版本包括秒数,请参见下面的%T。
%s 31507200 是从纪元开始的秒数,1970-01-01 00:00:00+0000(UTC)。(TZ)(根据mktime(tm)计算)
%S 00 为十进制数(范围为00到60)。(范围为最多60秒,以允许偶尔的闰秒。)(计算来自tm_sec.)
%T 00:00:00 以24小时表示的时间(%H:%M:%S)。
%u 5 一周中的某一天为十进制,范围为1到7,星期一为1。另见%w。
%U 00 当前年份的周数为十进制数,范围为00至53,从第一个星期日开始,为第一周。另请参见%V和%W(根据tm_yday和星期四)
%V 53 本年度的ISO 8601周数(见注释)作为十进制数,范围为01到53,其中第1周为第一周新年至少有4天。
%w 5 一周中的某一天为十进制,范围为0到6,星期日为0。 另见%u。
%W 0 当前年份的周数为十进制数,范围为00至53,从第一个星期一开始为第一周。
%x 01/01/71 当前区域设置的首选日期表示形式,不带时间。
%X 00:00:00 当前l的首选时间表示形式