gpt4 book ai didi

node.js - 如何在 Node.js 中获得准确的 UTC 纳秒时间戳

转载 作者:行者123 更新时间:2023-12-04 13:57:56 27 4
gpt4 key购买 nike

python3有可能运行以下结构:

from datetime import datetime
print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))})

这将输出类似 JSON 的结构:
{'timestamp': '1567658264143923968'}

现在我想在 Node.JS 12 中得到类似的结果。
  • 我需要一个字符串
  • 自 1970 年以来我需要 UTC 戳,但自从机器启动后不需要
  • 误差不超过最后 4 位(微秒精度或更好)

  • 所以 int 的 32 位不能成为限制。 (这在 2019 年第三季度不会成为问题,因为 Node 10 支持 bigint)。

    操作系统也不能设置这样的限制,因为 WinAPI 有 GetSystemTimePreciseAsFileTime和 *nix 有 clock_gettime(CLOCK_MONOTONIC)两者都优于 1us

    如何在 NodeJS 中获得纳秒的 UTC 时间戳字符串?

  • Date.now()+"000000"显示它缺少最后 6 位数字(毫秒),但任务是 4(微秒或更好)
  • This 7yo question似乎解决了一般时间戳问题,以及 hrtime只会让你机器正常运行时间,而不是真正的 UTC 时间。结果将与python无关。

  • 还有哪些选择?

    UPD

    现在,我可以稍微改写问题。从非常简单的角度来看,Nodejs 可以看作是一个独立于操作系统的运行时库。你写了一个 js 代码,它在所有平台上都可以正常工作。所以它必须将大多数可行的功能绑定(bind)到 js 接口(interface);定时器功能就在其中。正如我们所见,单调时钟 QueryPerformanceCounter() call 通过 process.hrtime() 绑定(bind)

    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

    如果你需要更高的精度,你可以自己构建一个本地 Node 模块: https://medium.com/the-node-js-collection/n-api-next-generation-node-js-apis-for-native-modules-169af5235b06

    或者,如果你真的喜欢 Python,你可以从 Node 执行一个 Python 脚本: How to call a Python function from Node.js

    关于node.js - 如何在 Node.js 中获得准确的 UTC 纳秒时间戳,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57800900/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com