我不知道time_t
的数据类型。它是浮动双重还是其他什么?因为如果我想要显示它,我需要与printf
对应的标记。我可以从那里处理其余部分以显示time_t
,但我需要知道与之对应的数据类型。
答案 0 :(得分:33)
这是特定于平台的。但是你可以把它变成一种已知的类型。
printf("%lld\n", (long long) time(NULL));
答案 1 :(得分:28)
不幸的是,它不是完全可移植的。它通常是整数,但它can be任何“整数或实数浮动类型”。
答案 2 :(得分:15)
您可以使用difftime
功能。它返回两个给定time_t
值之间的差异,输出值为double
(请参阅difftime documentation)。
time_t actual_time;
double actual_time_sec;
actual_time = time(0);
actual_time_sec = difftime(actual_time,0);
printf("%g",actual_time_sec);
答案 3 :(得分: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,最好的办法是尝试自己的实验,看看它在你的平台上和你的编译器上是如何工作的。