Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/date/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在Node.js中获得准确的UTC纳秒时间戳_Node.js_Date_Time_Timestamp_Unix Timestamp - Fatal编程技术网

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

如何在Node.js中获得准确的UTC纳秒时间戳,node.js,date,time,timestamp,unix-timestamp,Node.js,Date,Time,Timestamp,Unix Timestamp,python3有可能运行以下构造: from datetime import datetime print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))}) 这将输出类似于structore的JSON: {'timestamp': '1567658264143923968'} 现在我想在Node.JS 12中得到类似的结果 我需要一根绳子 自1970年起,我需要UTC盖章,但自机器启动后不需要 错误不超过最后4

python3
有可能运行以下构造:

from datetime import datetime
print({'timestamp':str(int(datetime.utcnow().timestamp() * (10**9)))})
这将输出类似于structore的JSON:

{'timestamp': '1567658264143923968'}
现在我想在Node.JS 12中得到类似的结果

  • 我需要一根绳子
  • 自1970年起,我需要UTC盖章,但自机器启动后不需要
  • 错误不超过最后4位(微秒精度或更高)
所以int的32位不能是一个限制。(这在2019年第三季度不会成为问题,因为节点10支持bigint)

操作系统也不能造成这样的限制,因为WinAPI有
GetSystemTimePreciseSFileTime
和*nix有
clock\u gettime(clock\u单调)
这两个都比1U好

如何在NodeJS中获取纳秒UTC时间戳字符串


  • Date.now()+“000000”
    显示它缺少最后6位(毫秒),但任务为4位(毫秒或更高)

  • 似乎解决了一般的时间戳问题,
    hrtime
    只会让您获得机器正常运行时间,而不是真正的UTC时间。结果将与python的结果无关

还有什么其他选择


UPD 现在,我可以把问题改写一下。从非常简单的角度来看,Nodejs可以看作是一个独立于操作系统的运行库。您只需编写一个js代码,它就可以在所有平台上运行。所以它必须将最可行的函数绑定到js接口;定时器功能就是其中之一。正如我们所看到的,单调的时钟
QueryPerformanceCounter()
调用是通过process.hrtime()绑定的


node.js中的哪个函数会导致在linux上调用
clock\u gettime(3)
,或者在windows上调用
getsystemtimeprecisesfiletime()
并以微秒或更高的精度将结果返回给js?

如果您要寻找的分辨率是微秒,那么
process.hrtime()
就足够了

const hrTime = process.hrtime()
console.log(hrTime[0] * 1000000 + hrTime[1] / 1000)
或者你可以使用

如果您需要更高的精度,可以自行构建本机节点模块:


或者,如果您确实喜欢Python,可以从节点执行Python脚本:

您是否尝试过使用
process.hrtime()
?或者,您可以使用如下内容:@Scaccoman您如何获得python代码支持的结果
process.hrtime()
将给出无效的结果
Date.now()+“000000”
将缺少最后6位数字。我在这里回答了这个问题:@pirs我知道。如果你注意的话,在问题的主体中有类似“search attemt”的链接,引用了几乎相同的链接。我可能会重复同样的话:“这个7yo问题似乎解决了一般的时间戳问题,而hrtime只会让您获得机器正常运行时间,而不是真正的UTC时间。结果将与python的结果无关。”因此,目前还没有正确的答案,这是一个纯node.js问题-他们可能很容易添加此类支持。尝试过,结果与python的输出不同有趣的是,我猜python和Node.js使用不同的系统来计算时间戳。从节点调用Python脚本怎么样?这会产生正确的时间戳吗?
hrtime
使用实时计数器(
QueryPerformanceCounter
在windows上),该计时器在cpu初始化时启动。相反,正常的实现应该在linux上调用
clock\u gettime(3)
,在windows上调用
getsystemtimeprecisesfiletime
,以获得绝对时间。从节点调用python完全是胡说八道。。我刚才已经指出,似乎节点中没有实现相应的函数。和往常一样,我可能会使用V8 api编写C插件,但是。。这一切都是一个存根,必须手动支持,在某些系统上可能无法工作