You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

POSIX标准下C语言如何获取Unix时间戳?

C语言获取Unix时间戳的实现方法

你想要的和Bashdate +"%s"效果一致的秒级时间戳,在C语言里实现非常简单,你给出的示例代码中已经用到了核心接口:
time_t类型在POSIX标准下本身就存储了从1970-01-01 00:00:00 UTC到当前时间的秒数,也就是标准Unix时间戳。

1. 秒级时间戳获取(最简写法,和Bash调用一样便捷)

直接调用<time.h>头文件中的time()函数即可,有两种等价写法:

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

int main() {
    // 写法1:传指针存储结果
    time_t now;
    time(&now);

    // 写法2:直接获取返回值,更简洁
    // time_t now = time(NULL);

    // 打印时间戳,强制转long long避免不同平台time_t长度差异导致的打印错误
    printf("%lld\n", (long long)now);
    return 0;
}

你之前用到的localtime、strftime都是把拿到的时间戳now转换为可读格式的后续步骤,不需要转换的话直接用now变量即可。

2. 更高精度时间戳获取

如果需要毫秒、微秒、纳秒级的时间戳,可以用以下两个接口:

微秒级精度(POSIX标准)

使用<sys/time.h>头文件的gettimeofday():

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

int main() {
    struct timeval tv;
    gettimeofday(&tv, NULL);
    // 秒级时间戳和time()返回结果完全一致
    long long sec = tv.tv_sec;
    // 毫秒级时间戳
    long long ms = (long long)tv.tv_sec * 1000 + tv.tv_usec / 1000;
    // 微秒级时间戳
    long long us = (long long)tv.tv_sec * 1000000 + tv.tv_usec;

    printf("秒级:%lld\n毫秒级:%lld\n微秒级:%lld\n", sec, ms, us);
    return 0;
}

纳秒级精度(C11/POSIX标准)

使用<time.h>头文件的clock_gettime():

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

int main() {
    struct timespec ts;
    clock_gettime(CLOCK_REALTIME, &ts);
    // 纳秒级时间戳
    long long ns = (long long)ts.tv_sec * 1000000000 + ts.tv_nsec;
    printf("纳秒级:%lld\n", ns);
    return 0;
}

内容的提问来源于stack exchange,提问作者armanvanlendel

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.26 22:45:07