2015-10-17 33 views
-2

我正在从here获知C中与时间相关的函数。他们证明了使用以下示例的strftime()函数: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转换说明符不是C,而是对printf的GNU扩展。 '%m'转换将打印出与errno中的错误代码相对应的字符串。

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

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

回答

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 *地址。
+3

致OP:阅读任何类型的文档就足够了。例如在这个答案的链接中的手册页。 –