C中strftime()函数中的奇怪格式说明符

时间:2015-10-17 06:04:38

标签: c printf strftime format-specifiers

我从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中打印对应于错误代码的字符串。

我知道格式说明符%是C99中的新内容。它以十六进制形式打印浮点数。

但是这个程序中%b和%I的目的是什么?我不明白%b&amp;的用途是什么%一世?我从来没有听说过这个。 %I与%i相同吗?

1 个答案:

答案 0 :(得分:5)

strftime()格式与sprintf()无关  格式。它们都使用%符号和字母表,但这些相似之处结束了。使用strftime()的整个(和唯一)点是控制打印日期/时间值的格式,就像printf()用于控制数字和字符串数据的格式一样由于他们完成了完全不同的工作,因此在两个函数中获得不同的结果(以及重用有限的字母表来表示不同的事物)是合理的。

strftime()

  • %A是星期几的完整本地名称。
  • %b是缩写的月份名称。
  • %d是这个月的日子。
  • %I是12小时格式的小时。
  • %M是分钟。
  • %p是AM / PM指标。

其中,%b%I%M在标准printf()中没有任何意义,而:

  • %A以十六进制表示法打印double大写字母。
  • %d以小数形式打印int
  • %p打印void *地址。