什么原始数据类型是time_t?

时间:2010-05-08 01:14:26

标签: c types printf time-t

我不知道time_t的数据类型。它是浮动双重还是其他什么?因为如果我想要显示它,我需要与printf对应的标记。我可以从那里处理其余部分以显示time_t,但我需要知道与之对应的数据类型。

4 个答案:

答案 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,最好的办法是尝试自己的实验,看看它在你的平台上和你的编译器上是如何工作的。