【问题标题】:strftime( ) doesn't display the seconds correctlystrftime( ) 无法正确显示秒数
【发布时间】:2010-10-10 03:03:13
【问题描述】:

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

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

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

【问题讨论】:

  • @Brian: 24 小时制的时间 (%H:%M:%S)
  • %S%S%S%S 是怎么回事?那不应该只是一个 %S 吗?你的输出还有一个额外的:。这是真正的输出吗?
  • "%S%S%S%S" 我应该先阅读我的代码,然后再从编辑器中粘贴它。如果你删除这部分,这是真正的输出。

标签: c time formatting timestamp


【解决方案1】:

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

#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。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

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

      • %s 是自 unix 纪元以来的秒数。
      • %S 是当前时间的秒值 (00-60),对于小于 10 的数字,前导 0。

      【讨论】:

      • 哈,哇。我需要更改我的等宽字体。乍一看我目前的字体,lower-s 和upper-s 几乎无法区分。嗯。在您发布此内容之前,我没想过再看一遍。不过,谢谢。
      【解决方案4】:

      你没有用任何东西初始化struct tm *tmp; - 请你发布一个完整的例子吗?

      【讨论】:

      • 这是完整的例子,我不知道如何初始化它。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-04-23
      • 2018-06-09
      • 1970-01-01
      相关资源
      最近更新 更多