下面这些 C 示例以 Unix 秒作为通用基准,只有在运行时天然提供毫秒的地方才展示毫秒。复制之前先回答一个简单的问题:下游那个 API 要的是什么单位?

获取当前 Unix 时间

#include <time.h>

time_t now = time(NULL);

把时间戳转成 UTC

time_t seconds = 1700000000;
struct tm *utc = gmtime(&seconds);

上生产前留意

time_t 是 Unix 时间的惯用类型,但它的宽度和取值范围因平台而异。如果输出不能受宿主机时区影响,就用 UTC 那一组转换函数。

值跨越系统边界时,把单位写进字段名里:createdAtSeconds 和 createdAtMs 是比 createdAt 长了点,但出事故的时候能省下不少猜测。

Frequent questions:

Q: C 里该用什么类型存 Unix 时间戳?
A: 秒级精度用 time_t;需要存毫秒或纳秒时,用 <stdint.h> 里的 int64_t。别用 int 或 long,它们的宽度依赖平台。
Q: C 里怎么拿到毫秒?
A: 用 <time.h> 里的 clock_gettime(CLOCK_REALTIME, &ts),结果分别在 ts.tv_sec(秒)和 ts.tv_nsec(纳秒)里。毫秒按 ts.tv_sec * 1000LL + ts.tv_nsec / 1000000 计算。