52

我不知道time_t. 它是浮点双精度还是其他?因为如果我想显示它,我需要与它对应的标签printf。我可以从那里处理其余的显示time_t,但我需要知道与之对应的数据类型。

4

4 回答 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 回答