python3
可以运行以下构造:
from datetime import datetime
print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))})
这将输出类似JSON的结构:
{'timestamp': '1567658264143923968'}
现在我想在Node.JS 12中得到类似的结果。
- 我需要一根绳子
- 我需要1970年以来的UTC戳,但自机器 Boot 后就不需要了
- 误差不超过最后4位(微秒精度或更高)
因此int的32位不能成为限制。(这在2019年第三季度不会成为问题,因为Node 10支持bigint)。
操作系统也不能造成这样的限制,因为WinAPI有GetSystemTimePreciseAsFileTime
,*nix有clock_gettime(CLOCK_MONOTONIC)
,两者都比1us好
如何在NodeJS中获得纳秒UTC时间戳字符串?
Date.now()+"000000"
显示缺少最后6位数(米利斯),但任务为4(micros或更好)- This 7yo question似乎解决了一般的时间戳问题,而
hrtime
只会让你得到机器的正常运行时间,而不是真实的的UTC时间。结果将与Python无关。
还有其他选择吗?
UPD
现在,我可以稍微改变一下问题的措辞。从非常简单的Angular 来看,Nodejs可以被视为一个独立于操作系统的运行时库。你写一个js代码,它在所有平台上都能正常工作。所以它必须将大多数可行的函数绑定到js接口;定时器功能就是其中之一。正如我们看到的,单调时钟QueryPerformanceCounter()
调用通过process.hrtime()绑定
node.js中的哪个函数会导致linux上的clock_gettime(3)
调用,或windows上的GetSystemTimePreciseAsFileTime()
调用,并以微秒精度或更好的精度将结果返回给js?
3条答案
按热度按时间dba5bblo1#
我的临时解决方案:
hc8w905p2#
如果您正在寻找的分辨率是微秒,那么
process.hrtime()
应该足够了。或者,您可以使用timestamp-nano
如果你需要更高的精度,你可以自己构建一个native 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
idv4meu83#
对于最新版本的Node,process.hrtime.bigint()似乎提供了这一点。