C 中 strftime() 函数中的奇怪格式说明符
Strange format specifiers in strftime() function in C
我从 here 那里学习了 C 中与时间相关的函数。他们使用以下示例演示了 strftime() 函数:
#include <stdio.h>
#include <time.h>
#define LEN 150
int main ()
{
char buf[LEN];
time_t curtime;
struct tm *loc_time;
//Getting current time of system
curtime = time (NULL);
// Converting current time to local time
loc_time = localtime (&curtime);
// Displaying date and time in standard format
printf("%s", asctime (loc_time));
strftime (buf, LEN, "Today is %A, %b %d.\n", loc_time);
fputs (buf, stdout);
strftime (buf, LEN, "Time is %I:%M %p.\n", loc_time);
fputs (buf, stdout);
return 0;
}
我已经仔细研究过 printf() 中的 %m 说明符。它说 %m 转换说明符不是 C,而是 printf 的 GNU 扩展。 ‘%m’ 转换打印 errno.
中错误代码对应的字符串
我知道 %a 格式说明符是 C99 中的新功能。它以十六进制形式打印浮点数。
但是这个程序中的 %b 和 %I 的目的是什么?我不明白 %b & %I 有什么用?我从来没有听说过这个。 %I 和 %i 一样吗?
strftime()
formatting bears no relation to sprintf()
格式化。他们都使用 %
符号和字母,但相似之处仅此而已。使用 strftime()
的全部(也是唯一)目的是控制 date/time 值的打印格式,就像 printf()
用于控制数字和字符串的格式一样数据被打印出来。因为他们做的是完全不同的工作,所以在这两个函数中得到不同的结果(并重用有限的字母表来表示不同的东西)是合理的。
在strftime()
中:
%A
是星期几的本地完整名称。
%b
是缩写的月份名称。
%d
是一个月中的第几天。
%I
是 12 小时格式的小时。
%M
是分钟。
%p
是 AM/PM 指标。
其中,%b
、%I
和 %M
在标准 printf()
中没有意义,而:
%A
以大写字母的十六进制表示法打印 double
。
%d
将 int
打印为小数。
%p
打印一个 void *
地址。
我从 here 那里学习了 C 中与时间相关的函数。他们使用以下示例演示了 strftime() 函数:
#include <stdio.h>
#include <time.h>
#define LEN 150
int main ()
{
char buf[LEN];
time_t curtime;
struct tm *loc_time;
//Getting current time of system
curtime = time (NULL);
// Converting current time to local time
loc_time = localtime (&curtime);
// Displaying date and time in standard format
printf("%s", asctime (loc_time));
strftime (buf, LEN, "Today is %A, %b %d.\n", loc_time);
fputs (buf, stdout);
strftime (buf, LEN, "Time is %I:%M %p.\n", loc_time);
fputs (buf, stdout);
return 0;
}
我已经仔细研究过 printf() 中的 %m 说明符。它说 %m 转换说明符不是 C,而是 printf 的 GNU 扩展。 ‘%m’ 转换打印 errno.
中错误代码对应的字符串我知道 %a 格式说明符是 C99 中的新功能。它以十六进制形式打印浮点数。
但是这个程序中的 %b 和 %I 的目的是什么?我不明白 %b & %I 有什么用?我从来没有听说过这个。 %I 和 %i 一样吗?
strftime()
formatting bears no relation to sprintf()
格式化。他们都使用 %
符号和字母,但相似之处仅此而已。使用 strftime()
的全部(也是唯一)目的是控制 date/time 值的打印格式,就像 printf()
用于控制数字和字符串的格式一样数据被打印出来。因为他们做的是完全不同的工作,所以在这两个函数中得到不同的结果(并重用有限的字母表来表示不同的东西)是合理的。
在strftime()
中:
%A
是星期几的本地完整名称。%b
是缩写的月份名称。%d
是一个月中的第几天。%I
是 12 小时格式的小时。%M
是分钟。%p
是 AM/PM 指标。
其中,%b
、%I
和 %M
在标准 printf()
中没有意义,而:
%A
以大写字母的十六进制表示法打印double
。%d
将int
打印为小数。%p
打印一个void *
地址。