node.js - 如何在 Node.js 中获得准确的 UTC 纳秒时间戳
问题描述
python3
有可能运行以下构造:
from datetime import datetime
print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))})
这将输出类似 JSON 的结构:
{'timestamp': '1567658264143923968'}
现在我想在 Node.JS 12 中得到类似的结果。
- 我需要一个字符串
- 自 1970 年以来我需要 UTC 印章,但自机器启动以来就不需要
- 错误不超过最后 4 位(微秒精度或更好)
因此 32 位 int 不能成为限制。(这在 2019 年第三季度不会是问题,因为 Node 10 支持 bigint)。
操作系统也不能造成这样的限制,因为 WinAPIGetSystemTimePreciseAsFileTime
和 *nixclock_gettime(CLOCK_MONOTONIC)
都优于 1us
如何在 NodeJS 中获得纳秒 UTC 时间戳字符串?
Date.now()+"000000"
显示它缺少最后 6 位数字(毫秒),但任务是 4(微或更好)这个 7yo 问题似乎解决了一般时间戳问题,并且
hrtime
只会让您获得机器正常运行时间,而不是真正的 UTC 时间。结果将与python无关。
还有什么其他选择?
UPD
现在,我可以稍微改一下问题。从非常简单的角度来看,Nodejs 可以看作是一个独立于操作系统的运行时库。你编写一个 js 代码,它在所有平台上的工作原理都是一样的。所以它必须将大多数可行的功能绑定到 js 接口;定时器功能就是其中之一。正如我们所见,单调时钟QueryPerformanceCounter()
调用是通过 process.hrtime() 绑定的
node.js 中的哪个函数会导致clock_gettime(3)
在 linux 上调用,或GetSystemTimePreciseAsFileTime()
在 windows 上调用,并将结果返回给 js,精度为微秒或更好?
解决方案
如果您正在寻找的分辨率是微秒,那么process.hrtime()
应该就足够了。
const hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
或者,您可以使用timestamp-nano
如果您需要更高的精度,您可以自己构建一个本机节点模块:https ://medium.com/the-node-js-collection/n-api-next-generation-node-js-apis-for-native-模块-169af5235b06
或者,如果您真的喜欢 Python,您可以从 Node 执行 Python 脚本:如何从 Node.js 调用 Python 函数
推荐阅读
- java - 从 Java 调用 Apache Livy REST API
- javascript - jQuery过滤器如何链接到第二个选项卡
- javascript - 如何将名称显示格式变成点的形式?
- python - TypeError:列表索引必须是整数或切片,而不是单元测试中的 str
- reactjs - 如何使用反应钩子useState正确处理动态表单
- maven - Gradle 编译错误:com.jayway.restassured 包不存在导入 com.jayway.restassured.RestAssure
- docker - Docker:构建失败并出现错误未知父映像 ID
- c# - C# 目录服务很快,但读取结果真的很慢
- java - 对新对象的 Jpa 选择查询给出错误
- c# - 在 ViewBag 的循环元素中显示