我从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()格式与sprintf()无关
 格式化。它们都使用%符号和字母,但这就是相似之处的所在。使用strftime()的整个(唯一的)要点是控制打印日期/时间值的格式,就像printf()用于控制数字和字符串数据的打印格式一样。他们做的工作完全不同,因此在两个函数中获得不同的结果(并重用有限的字母表示不同的含义)是合理的。

strftime()中:


%A是星期几的完整本地名称。
%b是月份的缩写。
%d是月份中的一天。
%I是12小时格式的小时。
%M是分钟。
%p是AM / PM指示器。


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


%A以十六进制表示法以大写字母显示double
%dint打印为小数。
%p打印一个void *地址。

关于c - C语言中strftime()函数中的奇怪格式说明符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33183383/

10-11 23:59
查看更多