如何在C语言中获取当前时间的毫秒级Epoch时间戳?
问题描述
我在C语言中使用以下代码获取时间戳:
((long)time(NULL))
得到的结果示例:
1741573562 Tue Jan 20 1970 22:46:13 GMT-0500 (Peru Standard Time)
同时在JavaScript中使用以下代码获取时间戳:
Date.now()
得到的结果示例:
1741573562162 Sun Mar 09 2025 21:26:02 GMT-0500 (Peru Standard Time)
更新:使用Windows系统
解决方案
在Windows系统中,默认情况下time_t是32位有符号整数(即使是64位编译环境),不过1741573562这个值其实还在32位有符号整数的范围内(最大值为2147483647,对应2038年1月19日)。
你遇到的核心问题是时间戳单位不匹配:C语言里time(NULL)返回的是秒级时间戳,而JavaScript的Date对象需要的是毫秒级时间戳。如果直接把C的秒级时间戳传给JavaScript的Date构造函数,会被当作毫秒处理,这就导致日期显示成1970年的错误结果。正确做法是把C获取到的时间戳乘以1000后再传给JavaScript。
另外,如果想避免2038年的时间溢出问题,可以在C代码包含任何头文件之前定义宏_USE_64BIT_TIME_T,这样time_t会变成64位整数,能处理更远未来的日期。
内容的提问来源于stack exchange,提问作者Andres Diaz
相关产品推荐
相关产品推荐

