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
相关产品推荐
相关产品推荐

