我不知道time_t
. 它是浮点双精度还是其他?因为如果我想显示它,我需要与它对应的标签printf
。我可以从那里处理其余的显示time_t
,但我需要知道与之对应的数据类型。
thyrgle
问问题
121703 次
4 回答
37
它是特定于平台的。但是您可以将其转换为已知类型。
printf("%lld\n", (long long) time(NULL));
于 2010-05-08T01:43:17.050 回答
30
不幸的是,它不是完全可移植的。它通常是整数,但它可以是任何“整数或实浮点类型”。
于 2010-05-08T01:17:50.833 回答
18
您可以使用该功能difftime
。它返回两个给定time_t
值之间的差,输出值为double
(参见difftime 文档)。
time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0);
printf("%g",actual_time_sec);
于 2014-03-04T15:17:31.227 回答
2
您总是可以使用 mktime 之类的东西来创建已知时间(午夜,昨晚),并使用 difftime 来获得两者之间的双精度时差。对于独立于平台的解决方案,除非您深入研究库的细节,否则您不会做得比这更好。根据 C 规范,time_t 的定义是实现定义的(这意味着库的每个实现都可以按照他们喜欢的方式定义它,只要使用它的库函数按照规范行事。)
话虽这么说,我的 linux 机器上 time_t 的大小是 8 个字节,这表明是 long int 或 double。所以我做了:
int main()
{
for(;;)
{
printf ("%ld\n", time(NULL));
printf ("%f\n", time(NULL));
sleep(1);
}
return 0;
}
由 %ld 给出的时间每一步增加一,浮点数每次打印 0.000。如果您一心想使用 printf 来显示 time_ts,最好的办法是尝试自己的此类实验,看看它在您的平台和编译器上的效果如何。
于 2010-05-08T01:39:04.010 回答