如何获取C的Unix时间戳(double或float)

And*_*ndy 1 c timestamp

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

Jon*_*ler 5

time()函数仅返回一个整数.具有秒和亚秒的两个 gettimeofday()clock_gettime()返回结构(不同的结构)(微秒gettimeofday()和纳秒clock_gettime()).你必须做一个适当的(但很简单的)计算来返回它作为a double.

将当前的Unix时间戳作为一个返回是没有意义的float; 你只能得到精确到几分钟左右的数值.

POSIX已正式弃用gettimeofday().但是,Mac OS X没有clock_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;
}
Run Code Online (Sandbox Code Playgroud)

样本输出:

t0 = 1385638386; f0 =   1385638400; d_pos = 79 (f1 =   1385638528); d_neg = -51 (f2 =   1385638272)
Run Code Online (Sandbox Code Playgroud)