BigQuery / Node.js 时间戳太远了

Posted

技术标签:

【中文标题】BigQuery / Node.js 时间戳太远了【英文标题】:BigQuery / Node.js timestamp way off 【发布时间】:2014-05-17 04:07:17 【问题描述】:

使用此包从轻量级 Node.js 应用程序向 Google BigQuery 进行流式插入:https://www.npmjs.org/package/bigquery

我通过这行简单的代码在我的服务器上生成了一个时间戳

jsonData['createdAt'] = new Date().getTime();

然后,我将其插入 BigQuery,插入到类型为“时间戳”的字段中。没有中间步骤(除了 Node 包)。

但是,虽然不是全部,但许多日期看起来很糟糕。例如:

46343-08-28 05:58:59 UTC

应该是 2014 年 5 月 16 日晚上 11 点 45 分。但是,我的一些 createdAt 日期是正确的,我找不到造成差异的原因。

有什么建议吗?

【问题讨论】:

【参考方案1】:

没有实际调试 JS 代码,这似乎是一个“千差万别”的问题。

看看这个:

SELECT USEC_TO_TIMESTAMP(1400341611711851)
2014-05-17 15:46:51 UTC

SELECT USEC_TO_TIMESTAMP(1400341611711851*1000)
46345-01-22 13:01:51 UTC

SELECT MSEC_TO_TIMESTAMP(1400341611711851)
46345-01-22 13:01:51 UTC

SELECT MSEC_TO_TIMESTAMP(1400341611711851/1000)
2014-05-17 15:46:51 UTC

因此,要获得以秒为单位的 UNIX 时间戳,请将 new Date().getTime() 数字除以 1000。

【讨论】:

似乎是问题所在。非常感谢。 要添加到这个答案,javascript Date "getTime() 方法返回自 Unix 纪元以来的毫秒数*。" Timestamp 使用自 Unix 纪元以来的秒数。【参考方案2】:

用途:

bigquery.datetime(new Date().toISOString())

【讨论】:

请更详细地编辑您的答案:这如何解决 OP 的问题?与接受的答案相比,它有什么用处?

以上是关于BigQuery / Node.js 时间戳太远了的主要内容,如果未能解决你的问题,请参考以下文章

服务帐户是在 node.js 中查询 google bigquery 的正确凭据吗?

从 node.js 获取 bigquery 结果到浏览器

重命名 node.js 续集时间戳列

如何在 node.js 环境中将查询语句传递给 bigquery

带有 node.js 的对话流中的 Bigquery ML

在 Node.js 中使用 BigQuery 将 JSON 作为字符串导入