如何获取C的Unix时间戳(双精度或浮点型)

如何获取C的Unix时间戳(双精度或浮点型),c,timestamp,C,Timestamp,如何获得C的Unix时间戳,特别是显示小数点的时间戳。我在别处找到的所有答案都返回一个整数 该函数仅返回一个整数。二者都 和 返回结构不同的结构,秒和亚秒微秒表示gettimeofday,纳秒表示clock_gettime。您必须进行适当但简单的计算才能将其作为double返回 将当前Unix时间戳作为浮点返回没有意义;你只能得到精确到几分钟左右的值 POSIX已经正式否决了gettimeofday。但是,MacOSX没有时钟gettime,所以您可能会发现gettimeofday的可用性更广泛

如何获得C的Unix时间戳,特别是显示小数点的时间戳。我在别处找到的所有答案都返回一个整数

该函数仅返回一个整数。二者都 和 返回结构不同的结构,秒和亚秒微秒表示gettimeofday,纳秒表示clock_gettime。您必须进行适当但简单的计算才能将其作为double返回

将当前Unix时间戳作为浮点返回没有意义;你只能得到精确到几分钟左右的值

POSIX已经正式否决了gettimeofday。但是,MacOSX没有时钟gettime,所以您可能会发现gettimeofday的可用性更广泛

#include <time.h>
#include <stdio.h>

int main(void)
{
    long  t0 = time(0);
    float f0 = t0;
    float f1;
    float f2;

    long d_pos = 0;
    long d_neg = 0;

    while ((f1 = t0 + d_pos) == f0)
        d_pos++;
    while ((f2 = t0 + d_neg) == f0)
        d_neg--;

    printf("t0 = %ld; f0 = %12.0f; d_pos = %ld (f1 = %12.0f); d_neg = %ld (f2 = %12.0f)\n",
        t0, f0, d_pos, f1, d_neg, f2);
    return 0;
}
该函数只返回一个整数。二者都 和 返回结构不同的结构,秒和亚秒微秒表示gettimeofday,纳秒表示clock_gettime。您必须进行适当但简单的计算才能将其作为double返回

将当前Unix时间戳作为浮点返回没有意义;你只能得到精确到几分钟左右的值

POSIX已经正式否决了gettimeofday。但是,MacOSX没有时钟gettime,所以您可能会发现gettimeofday的可用性更广泛

#include <time.h>
#include <stdio.h>

int main(void)
{
    long  t0 = time(0);
    float f0 = t0;
    float f1;
    float f2;

    long d_pos = 0;
    long d_neg = 0;

    while ((f1 = t0 + d_pos) == f0)
        d_pos++;
    while ((f2 = t0 + d_neg) == f0)
        d_neg--;

    printf("t0 = %ld; f0 = %12.0f; d_pos = %ld (f1 = %12.0f); d_neg = %ld (f2 = %12.0f)\n",
        t0, f0, d_pos, f1, d_neg, f2);
    return 0;
}

这是因为UNIX时间戳是一个整数。小数代表什么?请参阅。定义:Unix时间是一个每秒递增的单符号整数…@Syjin注:您的参考资料中还说:ISO C标准规定时间必须是算术类型,但不强制要求它使用任何特定类型或编码。这是因为Unix时间戳是一个整数。小数代表什么?请参阅。定义:Unix时间是一个每秒递增的单符号整数…@Syjin注:您的参考资料中还说:ISO C标准规定时间必须是算术类型,但不强制要求它使用任何特定类型或编码。而不是长t0=time0;,建议时间\u t t0=时间0;匹配时间的返回类型\u t@chux:我特意选择long,因为它足够大,可以保存Unix时间的当前值,而且不可能是C标准不排除的浮点类型,因为printf格式的字母很长时间是固定的,与完全不固定和不可知的时间相比,很容易知道。这不是生产代码,以防您没有注意到;这说明了一点,如果代码长t0=longtime0,那么故意的类型更改会更加明显。我不确定你会选择长v。时间是预期的,因此建议使用。而不是长t0=时间0;,建议时间\u t t0=时间0;匹配时间的返回类型\u t@chux:我特意选择long,因为它足够大,可以保存Unix时间的当前值,而且不可能是C标准不排除的浮点类型,因为printf格式的字母很长时间是固定的,与完全不固定和不可知的时间相比,很容易知道。这不是生产代码,以防您没有注意到;这说明了一点,如果代码长t0=longtime0,那么故意的类型更改会更加明显。我不确定你会选择长v。时间是预定的,因此建议。