如何实现JavaScript时间戳与Python时间戳的互相转换
时间戳格式说明
服务端返回的cctv_times字段是16位微秒级Unix时间戳,计数规则为UTC时区1970年1月1日0点起累计的微秒总数。
你看到值末尾带多个0,是因为该服务的时间采集精度仅到毫秒级,毫秒位之后的3位微秒值统一补0占位,不存在特殊编码。
对样例值1655375216687000做拆解:
- 前10位
1655375216:秒级Unix时间戳,对应UTC时间2022-06-16 10:26:56 - 中间3位
687:毫秒偏移量 - 最后3位
000:补位的微秒段,无实际精度意义
Python 生成服务端兼容时间戳
你之前用的datetime.now().strftime("%s%f")写法存在两个兼容问题:
%s是类Unix系统专属的格式化占位符,Windows环境下运行会直接报错- 生成的是系统真实微秒值,末尾不会自动补0,和服务端返回的格式特征不匹配
根据服务端的校验严格程度,可选择两种实现方案:
import time from datetime import datetime # 方案1:完全匹配服务端返回格式(毫秒精度,微秒位固定补3个0) ms_ts = int(time.time() * 1000) # 先生成13位毫秒级时间戳 server_compatible_ts = f"{ms_ts}000" # 方案2:真实微秒级时间戳(跨平台兼容,适用于服务端不强制校验末尾0的场景) now = datetime.now() real_us_ts = str(int(now.timestamp() * 1_000_000))
注:如果接口文档没有明确要求微秒位必须为0,优先用方案2,时间精度更高;如果接口校验严格匹配返回样例格式,用方案1即可。
JavaScript 与 Python 时间戳双向转换
首先明确两端默认时间戳的基础差异:
- JavaScript 原生
Date.now()生成的是13位毫秒级Unix时间戳 - Python 原生
time.time()、datetime.timestamp()返回的是秒级浮点数,精度随系统差异可达微秒/纳秒级
JS 时间戳转 Python 可识别格式
JS端转换代码:
// 原生获取JS默认13位毫秒戳 const jsTs = Date.now() // 转Python默认使用的秒级浮点数 const pySecondTs = jsTs / 1000 // 转业务服务要求的16位微秒格式 const serverFormatTs = `${jsTs}000`
Python端解析代码:
from datetime import datetime # 解析JS传来的秒级时间戳 dt1 = datetime.fromtimestamp(float(py_second_ts)) # 解析JS转好的16位服务端格式时间戳 dt2 = datetime.fromtimestamp(int(server_format_ts) / 1_000_000)
Python 时间戳转 JS 可识别格式
Python端转换代码:
from datetime import datetime now = datetime.now() # 转13位毫秒级时间戳,JS可直接传入Date对象解析 js_compatible_ts = int(now.timestamp() * 1000)
JS端解析代码:
// 直接传入即可生成合法Date对象 const dt = new Date(js_compatible_ts)
内容的提问来源于stack exchange,提问作者Aaditya Ura
相关产品推荐
相关产品推荐

