在 C 中打印时间(0) 的格式说明符

use*_*460 3 c time types

我们可以声明一个变量来保存系统的当前时间,使用:

time_t now = time(0);
Run Code Online (Sandbox Code Playgroud)

time(0)也可用于生成随机值:

#define SEED time(0);
srand((unsigned int )SEED);
Run Code Online (Sandbox Code Playgroud)

我的问题是:到底是什么time(0)?默认情况下,它以毫秒为单位,类型为long? 如果我想打印出 的值time(0),可以用"%d"print 吗?(Sicneprintf()要求我们传入它需要的类型,但是我怎么知道它的类型是什么time(0)?)。

如果它是 类型time_t,我应该在 printf 中使用什么格式说明符?

P.P*_*.P. 5

time_t由 C 标准 C11 7.27.1/3 定义为:

\n\n
\n

[...] 是能够代表时间的真实类型;

\n
\n\n

这意味着它可以是 int、long、unsigned long、double 或任何其他实数类型。基本上这是一个实现的选择。同样,它也没有定义time_t返回什么单位,C11,7.27.2.4/3:

\n\n
\n

time 函数返回当前日历时间的最佳近似值。如果日历时间不可用,则返回值 (time_t)(-1)\n。如果timer不是空指针,则返回值也会分配给它指向的对象。

\n
\n\n

您必须阅读您的实现内容。我在 Linux 上的 glibc 实现表示,time_t 返回的单位是秒。所以你可以将其转换为uintmax_t并打印:

\n\n
time_t tvalue = time(0);\nprintf("%ju", (uintmax_t)tvalue);\n
Run Code Online (Sandbox Code Playgroud)\n\n

或者您可以使用difftime(),它返回double两个值之间的差异time_t,这样您就不必担心 的基础类型time_t

\n

  • 我会使用“intmax_t”而不是“uintmax_t”。 (2认同)