【问题标题】:Node.js Oracle DB date returning wrong valueNode.js Oracle DB 日期返回错误值
【发布时间】:2021-01-27 01:33:08
【问题描述】:

我的数据库中有一个日期列。像这样用 SQLDeveloper 查询它时

SELECT some_date as "Some date",
       cast(some_date as timestamp) at time zone 'UTC' as "Some date UTC"
FROM mytable
FETCH NEXT 1 ROWS ONLY;

我把这个拿回来了

在 Node 中运行此代码时:

const oracledb = require('oracledb');

const dbConfig = {
  user: process.env.DB_USER,
  password: process.env.DB_PASSWORD,
  connectString: process.env.DB_TNSNAME,
};

oracledb.getConnection(dbConfig).then(async conn => {
  const result = await conn.execute('SELECT some_date FROM mytable FETCH NEXT 1 ROWS ONLY');
  console.log(result.rows[0][0]);
});

我得到这个输出:2017-11-09T21:00:00.000Z
并且当将此日期转换为本地时间时,例如使用时刻:

console.log(moment(date).format('YYYY/MM/DD HH:mm:ss'));

我收到2017/11/09 23:00:00

所以基本上,我通过 JS 查询数据库时得到的日期似乎比通过 SQL 开发人员查询时的日期晚 1 小时。
我怀疑这与 NOV-09 是常规时间(所以我的当地时间是 GMT+2)以及它当前是 DST(我的当地时间是 GMT+3)的事实有关,但是我该如何解决这个问题呢?

【问题讨论】:

标签: javascript node.js oracle date node-oracledb


【解决方案1】:

你试过这个(https://oracle.github.io/node-oracledb/doc/api.html#-16173-fetching-dates-and-timestamps)吗?

可以在启动Node.js之前设置环境变量ORA_SDTZ,例如:

$ export ORA_SDTZ='UTC'
$ node myapp.js

【讨论】:

  • 作为记录,我按照 memodba 提供的链接中的第二个选项并在我的 Node.JS 应用程序中设置客户端时区:process.env.ORA_SDTZ = 'UTC'; (在初始化连接之前)。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-08-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-27
相关资源
最近更新 更多