0

我尝试使用 strftime() 来获取格式化的时间戳。

char ft[ 256 ];
struct tm *tmp;
strftime( ft, 256, "%D - %T", tmp );

我的问题是我得到“13/02/60 - 03:07:-17958194”。有没有办法正确显示秒数?(我正在使用 Mac OS X 和 gcc)

4

4 回答 4

7

您在发布的代码中使用了未初始化的值,这可以解释您遇到此问题的原因。以下代码会导致您要查找的内容:

#include <stdio.h>
#include <time.h>

int
main(int argc, char *argv[]) {
  char ft[256];
  struct tm *tmp;
  time_t curtime;

  time(&curtime);
  tmp = localtime(&curtime);

  strftime(ft, 256, "%D - %T %s", tmp);
  printf("%s\n", ft);

  return(0);
}

然后,编译并运行示例:

cc -o time_ex time_ex.c
./time_ex
02/26/09 - 11:26:34 1235665594

ETA:当然,如果您只想要本地时间而不需要 UNIX 时间,请删除 %s。

于 2009-02-26T16:27:33.847 回答
3

假设您想要“mm/dd/yy - hh:mm:ss”,“%D - %T”应该会给你正确的结果。

如果您的示例对您的使用准确,您可能需要考虑为函数提供实时而不是内存中的某个随机地址。

于 2009-02-26T16:28:01.410 回答
1

%s 和 %S 是不同的格式字符。

  • %s 是自 unix 纪元以来的秒数。
  • %S 是当前时间的秒值 (00-60),对于小于 10 的数字,前导 0。
于 2009-02-26T16:40:01.460 回答
0

您没有struct tm *tmp;使用任何东西进行初始化 - 请您发布一个完整的示例吗?

于 2009-02-26T16:27:50.100 回答