JavaScript
const milliseconds = Date.now()
const seconds = Math.floor(milliseconds / 1000)
Python
import time
seconds = int(time.time())
milliseconds = time.time_ns() // 1_000_000
Java
long milliseconds = System.currentTimeMillis();
long seconds = java.time.Instant.now().getEpochSecond();
PHP、Go、SQL 与 Shell
PHP: time()
Go: time.Now().Unix()
PostgreSQL: floor(extract(epoch from now()))
Shell: date +%s
使用前核对单位
必须确认接收系统要求秒还是毫秒。单位不匹配比设备时钟错误更常见,也可能造成一千倍偏差。若代码运行在分布式系统中,还应确认主机时钟同步、整数类型范围以及序列化格式。
先核对函数返回单位
JavaScript 的 Date.now() 返回毫秒。Python 的 time.time() 返回带小数的秒,time.time_ns() 返回整数纳秒。Java 的 Instant 则拆分整秒与纳秒调整值。给毫秒数补零只改变表示单位,不等于增加真实测量精度。
建议用固定样本 1700000000 秒或 1700000000000 毫秒做单元测试,两者应在时间戳转换器得到 2023-11-14T22:13:20Z。比起不断变化的当前值,固定样本更容易发现千倍单位错误。
JavaScript 中区分日期与耗时
const milliseconds = Date.now()
const seconds = Math.floor(milliseconds / 1000)
const isoUtc = new Date(milliseconds).toISOString()
const started = performance.now()
// 在这里执行需要测量的操作。
const elapsedMilliseconds = performance.now() - started
前三行表达日历时刻,最后两行用单调时钟测量一段耗时,不是 Unix 时间戳。系统校时可能改变 Date.now(),所以短任务性能测量不应混用这两种时钟。
19 位数值怎么跨系统传递?
接收 19 位纳秒数据时,不要先转为 JavaScript Number。如果接收端不能精确保留大整数,在 JSON 中使用十进制字符串,再由支持的环境转成 BigInt。否则数据可能在进入转换器之前就已经丢了最后几位。
SQL 还应检查数据库引擎和会话时区,同名或近似函数可能返回不同类型,或使用不同的会话规则。把单位写进字段约定,导入后用已知样本复核;交换格式可参考ISO 8601 与 Unix 时间。