我们可以声明一个变量来保存系统的当前时间,使用:
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 中使用什么格式说明符?
time_t由 C 标准 C11 7.27.1/3 定义为:
\n\n\n[...] 是能够代表时间的真实类型;
\n
这意味着它可以是 int、long、unsigned long、double 或任何其他实数类型。基本上这是一个实现的选择。同样,它也没有定义time_t返回什么单位,C11,7.27.2.4/3:
\n\n\ntime 函数返回当前日历时间的最佳近似值。如果日历时间不可用,则返回值 (time_t)(-1)\n。如果timer不是空指针,则返回值也会分配给它指向的对象。
\n
您必须阅读您的实现内容。我在 Linux 上的 glibc 实现表示,time_t 返回的单位是秒。所以你可以将其转换为uintmax_t并打印:
time_t tvalue = time(0);\nprintf("%ju", (uintmax_t)tvalue);\nRun Code Online (Sandbox Code Playgroud)\n\n或者您可以使用difftime(),它返回double两个值之间的差异time_t,这样您就不必担心 的基础类型time_t。