【发布时间】:2017-02-12 00:38:54
【问题描述】:
这是我要插入数据库的日期:
'1970-01-18T00:00:00+00:00'
但是当我查看数据库中的条目时,它落后了 8 小时:
1970-01-17 16:00:00
我的 Ubuntu 系统上使用的时区是 UTC。我通过在输出的终端中输入date 进行检查:
Tue Oct 4 00:00:53 UTC 2016
我正在使用 node.js,这实际上是用于插入的代码:
const Cassandra = require( 'cassandra-driver' );
const Promise = require( 'bluebird' );
const db = Promise.promisifyAll( new Cassandra.Client({ contactPoints: ['127.0.0.1'], keyspace: 'project' }) );
let date_created = '1970-01-18T00:00:00+00:00';
db.executeAsync( "INSERT INTO posts (id, date_created) VALUES (?, ?);", [someID, date_created], {prepare: true} );
我直接从apache website 安装了 cassandra,并且在安装或执行二进制文件时没有指定任何时区或任何内容。
有谁知道为什么要休息 8 小时以及如何解决?
编辑: 我尝试了不同的硬编码日期,显然并非所有日期都晚了 8 小时。与 2 月、3 月和 4 月相关的日期在数据库中显示晚 7 小时。 12 月仍然晚了 8 小时。
编辑2: 哇!所以我没有提到我用来查看数据的 IDE,因为我认为它不重要,但我使用的是 dbeaver。我决定在终端中使用 cqlsh 查看我的数据(而不是在 dbeaver 中查看),这些值是正确的!我还尝试通过节点检索数据.js 并打印出值,并且值也是正确的!这使我得出结论,dbeaver 或它使用的 cassandra 驱动程序有问题。
这是一个错误吗?或者有没有办法让日期在 dbeaver 中正确显示?
【问题讨论】:
-
你是通过节点插入时间还是被cassandra标记
-
@derek 我正在从节点插入时间(如上面的代码所示)。
-
date_created 列的数据库类型是什么?尝试 1970-01-18T00:00:00+0000 而不是 1970-01-18T00:00:00+00:00
-
你有没有试过插入一个Date对象,而不是要解析为日期时间的字符串?,换句话说,你可以试试
let date_created = new Date(Date.parse("1970-01-18T00:00:00+00:00")) -
@Reddy date_created 列的类型为
timestamp。尝试您的建议得到了相同的结果。
标签: node.js datetime cassandra dbeaver